用MFC写一个程序。现在需要把一个编辑框的值跟另外一个值比较,需要把Csring型识别为十六进制,该怎么写?

在用MFC写一个程序,里面涉及到串口的内容,我是用MSComm控件来写。串口的返回值是十六进制的,这是下位机的程序必须的要求的,不然显示结果就会是一对乱码,有可能是ASC... 在用MFC写一个程序,里面涉及到串口的内容,我是用MSComm控件来写。串口的返回值是十六进制的,这是下位机的程序必须的要求的,不然显示结果就会是一对乱码,有可能是ASCII码,反正我需要的只有十六进制能显示出来。程序如下:
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
if(m_ctrlHexDisplay.GetCheck())
strtemp.Format("%02X ",bt); //将字符以十六进制方式送入临时变量strtemp
else
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRXData+=strtemp; //加入接收编辑框对应字符串
RxStrTemp = strtemp;
这个RxStrTemp对应的是一个串口回测的显示框,strtemp里面就是返回的十六进制值。现在我需要另外建一个编辑框,然后在里面把输入一个值,这个值是十六进制的。但是这个输入框的值是Cstring型的。现在让这个值可以跟回测显示框里的值比较是否一致。遇到的问题就是,无论我用什么方法来比较,它都显示不一致。比如串口回来的值是40,我输入框里也输入40,但是比较结果还是不一致。就考虑到是不是这个输入框输入的值没有识别为十六进制的,所以他们的ASCII码比较结果是不一致的。已经试过我的比较函数是没有问题的,可以比较。就是想把这个输入框里的值怎么转化成十六进制识别的?是不是转化后就可以比较了呢?满意的再加分哦!
展开
 我来答
weiyinwu
2012-02-29 · TA获得超过1540个赞
知道小有建树答主
回答量:1057
采纳率:50%
帮助的人:1147万
展开全部
你两个地方输出的值都CString类型的。不必要使用数字比较的形式比较。直接字符方式比较即可。
比如串口返回的是"AB";你要对比的值也可以输入16进制的AB,即可比较
CString可以直接对比,方式如下
CString s;//s是从输入的编辑框
GetDlgItemText(IDC_EDIT1,s);//从编辑框中读入值到s中
//注意,如果你有将编辑框关联了CString变量,那么在使用前使用UpdateData(TRUE);将输入界面的值传到变量
s.MakeLower();//十六进制因为有字母,对字串对比的时候将大写转换成小写
RxStrTemp.MakeLower();//十六进制因为有字母,对字串对比的时候将大写转换成小写
if(s==RxStrTemp) //相同
{
AfxMessageBox("数值相同!");
}
else
{
AfxMessageBox("数值不同!");
}
更多追问追答
追问
可是这样比较的话,RxStrTemp里面的数据是十六进制的,S里面的数据只是输入的AB,并没有定义是十六进制,它会当成字符来识别吧?这两个求“==”,计算机运行时会不会一个按照十六进制识别,一个按照字符识别,这样两个的ASCII码就是不同的了。你的意思是不是,他们两个最后都是输入到一个Cstring型的变量里了,这样比较起来就是一样的了。
追答
RxStrTemp你这个不是CString字符串的类型吗?
你在函数中都有这样的语句RxStrTemp = strtemp;我认为已经是字符串了。而Edit控件得到的值也是这个类型的。
小北娃
2012-02-29 · TA获得超过105个赞
知道小有建树答主
回答量:158
采纳率:0%
帮助的人:111万
展开全部
考虑下字节顺序。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式