字符串转换为十六进制
一般的程序对字符串操作,串口程序却时常采用十六进制串。我在本在的社区中看到一位大侠的一个转换算法不错,贴出来和大家贡献。
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()获得的数据通过串口发送出去了,这时发送的是十六进制的数据。
- 上一篇: C/C++ —— 十六进制类型字符串的转换
- 下一篇: Android String与十六进制数互转