[转]CString 如何转为 BYTE[] 数组

16进制字符串CString 如何转为 BYTE[] 数组

 http://www.cppblog.com/Lee7/archive/2008/08/22/38887.html

在网上和QQ群里广发帖,寻求解决16进制字符串CString 转为 BYTE[] 数组的方法。费尽周折在一个大学同学的帮助下,问题解决了!在这简单分析下加深印象,同时也希望对有需要的朋友有参考作用:
需求:
16进制字符串CString 如何转为 BYTE[]
CString str ="01 02 03 04";
BYTE cmd[1024];

赋值后
cmd[1024] =  {0X01,0X02,0X03,0X04};

解决方法:
第一步:将ASCII码转化为16进制数(注意:ASCII码和16进制数的区别)

// 将ASCII码转化为16进制数
BYTE CSendDataDlg::ConvertHexChar(BYTE 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;
}

 

第二步:调用上面的那个函数来实现需求

CString str  = " 01 02 03 04 " ;
BYTE tmpByte 
=   0x00 ;
int  strLen  =  str.GetLength();
BYTE cmd[
1024 ];
memset(cmd, 
' /0 ' sizeof (cmd));

for  ( int  i = 0 , j = 0 ; i < 1024 ,j < strLen; i ++ ,j ++ )
{
   
if (str[j] == ' ')
    
++j;
   tmpByte 
= str[j];        
   cmd[i] 
= ConvertHexChar(tmpByte)<<4;//左移4位
   if (str[++j] == ' ')
       
++j;
   tmpByte 
= str[j];        
   cmd[i] 
= cmd[i] + (ConvertHexChar(tmpByte) & 0xF);//取低4位然后相加。    
}

注释:
把字符赋给BYTE,实则赋的是字符的ASCII码值,因此要先把ASCII码转化为对应的16进制数。
两个字符赋给一个BYTE,就要把第一个字符放到BYTE的高4位,而第二个字符放到BYTE的低4位。
中间通过判断去掉空格。

 

main()
{
CString str ="01 02 03 04";
BYTE cmd[1024];
char *pstr=NULL;
char stValue[3]={0};
DWORD dwCount = 0;
DWORD i =0 ;

LPTSTR lpsz =(LPTSTR)(LPCTSTR)str;
pstr = (char *)lpsz;


while (pstr)
{
if (i==2) && (*pstr != ' ')
{
printf("error/r/n");
}
if (*pstr != ' ')
{
stValue[i++]=*pstr;
pstr++;
continue;
}
else
{
i=0;
sscanf(string, "%X", &cmd[dwcount++]);
while(pstr && (*pstr==" ")) pstr++;
}
}

printf("dwcount=%d/r/n",dwcount);
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值