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