织梦CMS - 轻松建站从此开始!

罗索

字符串转换为十六进制

jackyhwei 发布于 2011-10-27 14:45 点击:次 
一般的程序对字符串操作,串口程序却时常采用十六进制串。我在本在的社区中看到一位大侠的一个转换算法不错,贴出来和大家贡献。
TAG:

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

char ConvertHexChar(char ch);

int String2Hex(CString str, CByteArray &senddata,char*tag);

函数功能:将CString 类型的str转换成CByteArray类型,保存在senddata中,tag是分隔符。

函数原型:

  1. int String2Hex(CString str, CByteArray &senddata,char* tag) 
  2.  int   hexdata,lowhexdata;   
  3.  int   hexdatalen=0;   
  4.  int   len=str.GetLength();   
  5.  senddata.SetSize(len/2);   
  6.  for(int   i=0;i<len;)   
  7.  {   
  8.   char   lstr,hstr=str[i];   
  9.   if(!strcmp(hstr,tag)   
  10.   {   
  11.    i++;   
  12.    continue;   
  13.   }   
  14.   i++;   
  15.   if(i>=len)   
  16.    break;   
  17.   lstr=str[i];   
  18.   hexdata=ConvertHexChar(hstr);   
  19.   lowhexdata=ConvertHexChar(lstr);   
  20.   if((hexdata==16)||(lowhexdata==16))   
  21.    break;   
  22.   else     
  23.    hexdata=hexdata*16+lowhexdata;   
  24.   i++;   
  25.   senddata[hexdatalen]=(char)hexdata;   
  26.   hexdatalen++;   
  27.  }   
  28.  senddata.SetSize(hexdatalen);   
  29.  return   hexdatalen; 
  30.  
  31. char ConvertHexChar(char ch) 
  32.   if((ch>='0')&&(ch<='9'))   
  33.   return   ch-0x30;   
  34.   else   if((ch>='A')&&(ch<='F'))   
  35.   return   ch-'A'+10;   
  36.   else   if((ch>='a')&&(ch<='f'))   
  37.   return   ch-'a'+10;   
  38.   else   return   (-1);   

例:

要发送的十六进制数据为:FF,00,00,00,3F,00,##     分隔符为“,”

  1. CByteArray senddata; 
  2. CString str="FF,00,00,00,3F,00,## "
  3. String2Hex(str,senddata,","); 

接下来就可以把senddata.GetData()获得的数据通过串口发送出去了,这时发送的是十六进制的数据。

(bwmwm)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201110/15217.html]
本文出处:blog.csdn.net/bwmwm 作者:bwmwm
顶一下
(2)
66.7%
踩一下
(1)
33.3%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容