字符串转换为十六进制

本文介绍了一种用于将包含十六进制字符的CString类型数据转换为CByteArray类型的方法,便于通过串口发送十六进制数据。文章提供了具体的转换算法实现及使用示例。

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

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

转载于:https://my.oschina.net/makeit/blog/287568

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值