MFC输入框CEdit控件十六进制转换

Posted 程序天空下的骆驼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC输入框CEdit控件十六进制转换相关的知识,希望对你有一定的参考价值。

做MFC串口发送的时候,一般使用CEdit控件作为发送输入框,一般是发送输入框关联一个CString的变量,通过updatedata更新,大部分情况下我们需要使用十六进制发送,但是CString默认是字符串格式,比如输入框输入11 22 33 44 55,实际上是内容"11 22 33 44 AA",我们希望将它转换为0x11,0x22,0x33,0x44,0xaa。

那么如何实现了,通过下列的2个函数实现

 1 //将一个字符串作为十六进制串转化为一个字节数组,字节间可用空格分隔,
 2 //返回转换后的字节数组长度,同时字节数组长度自动设置。
 3 //说明:将字符串str[]="11 22 33 44 AA"转换成0x11,0x22,0x33,0x44,0xaa
 4 int CMFC_Uart20160921Dlg::Str2Hex(CString str, char* data)
 5 {
 6     int t, t1;
 7     int rlen = 0, len = str.GetLength();
 8     //data.SetSize(len/2);
 9     for (int i = 0; i<len;)
10     {
11         char l, h = str[i];
12         if (h ==  )
13         {
14             i++;
15             continue;
16         }
17         i++;
18         if (i >= len)
19             break;
20         l = str[i];
21         t = HexChar(h);
22         t1 = HexChar(l);
23         if ((t == 16) || (t1 == 16))
24             break;
25         else
26             t = t * 16 + t1;
27         i++;
28         data[rlen] = (char)t;
29         rlen++;
30     }
31     return rlen;
32 }
33 
34 char CMFC_Uart20160921Dlg::HexChar(char c)
35 {
36     if ((c >= 0) && (c <= 9))
37         return c - 0x30;
38     else if ((c >= A) && (c <= F))
39         return c - A + 10;
40     else if ((c >= a) && (c <= f))
41         return c - a + 10;
42     else
43         return 0x10;
44 }

测试代码如下

char data[512];

//十六进制发送
int iLen = Str2Hex(m_EditSend,data);//m_EditSend是CEit控件关联的CString变量
pThreadCom->SendData((BYTE *)data, iLen);//通过串口发送数据

 

以上是关于MFC输入框CEdit控件十六进制转换的主要内容,如果未能解决你的问题,请参考以下文章

单击控件时在MFC中选择CEdit控件的内容

从 MFC 中的编辑控件写入文本 [重复]

编辑框等控件边框美化(继承CEdit,然后覆盖OnMouseLeave, OnSetFocus, OnPaint函数即可。原来的CEdit虽然代码不可见,但它也是有句柄的,照样随便画)

MFC的Dialogbox多行文本框(CEdit)有最大字符限制,默认最大显示长度是?怎么实现显示160KB大小的文件

在 mfc 的 cedit 控制中处理箭头键

MFC - 是不是可以为除 CEdit 之外的任何其他控件显示气球提示?