Chinaunix首页 | 论坛 | 博客
  • 博客访问: 281386
  • 博文数量: 59
  • 博客积分: 1346
  • 博客等级: 中尉
  • 技术积分: 461
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-06 17:17
文章分类

全部博文(59)

文章存档

2012年(9)

2011年(50)

分类: C/C++

2011-12-05 15:28:20

一般的程序对字符串操作,串口程序却时常采用十六进制串。我在本在的社区中看到一位大侠的一个转换算法不错,贴出来和大家贡献。

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 {  
  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()获得的数据通过串口发送出去了,这时发送的是十六进制的数据。

阅读(2782) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~