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);//通过串口发送数据

 

posted on 2016-09-26 14:21  程序天空下的骆驼  阅读(1147)  评论(0编辑  收藏  举报

导航