一般的程序对字符串操作,串口程序却时常采用十六进制串。我在本在的社区中看到一位大侠的一个转换算法不错,贴出来和大家贡献。
char ConvertHexChar(char ch);
int String2Hex(CString str, CByteArray &senddata,char*tag);
函数功能:将CString 类型的str转换成CByteArray类型,保存在senddata中,tag是分隔符。
函数原型:
- int String2Hex(CString str, CByteArray &senddata,char* tag)
- {
- int hexdata,lowhexdata;
- int hexdatalen=0;
- int len=str.GetLength();
- senddata.SetSize(len/2);
- for(int i=0;i<len;)
- {
- char lstr,hstr=str[i];
- if(!strcmp(hstr,tag)
- {
- i++;
- continue;
- }
- i++;
- if(i>=len)
- break;
- lstr=str[i];
- hexdata=ConvertHexChar(hstr);
- lowhexdata=ConvertHexChar(lstr);
- if((hexdata==16)||(lowhexdata==16))
- break;
- else
- hexdata=hexdata*16+lowhexdata;
- i++;
- senddata[hexdatalen]=(char)hexdata;
- hexdatalen++;
- }
- senddata.SetSize(hexdatalen);
- return hexdatalen;
- }
-
- char ConvertHexChar(char ch)
- {
- if((ch>='0')&&(ch<='9'))
- return ch-0x30;
- else if((ch>='A')&&(ch<='F'))
- return ch-'A'+10;
- else if((ch>='a')&&(ch<='f'))
- return ch-'a'+10;
- else return (-1);
- }
例:
要发送的十六进制数据为:FF,00,00,00,3F,00,## 分隔符为“,”
- CByteArray senddata;
- CString str="FF,00,00,00,3F,00,## ";
- String2Hex(str,senddata,",");
接下来就可以把senddata.GetData()获得的数据通过串口发送出去了,这时发送的是十六进制的数据。
(bwmwm) |