码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-09-26 16:20:49      阅读:543      评论:0      收藏:0      [点我收藏+]

标签:

做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控件十六进制转换

标签:

原文地址:http://www.cnblogs.com/codecamel/p/5909071.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!