首页 > 代码库 > MFC输入框CEdit控件十六进制转换

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         else26             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     else43         return 0x10;44 }

测试代码如下

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

 

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