山寨:不是最好的,是最适合我们的!欢迎体验山寨 中文版MSDN

Blog @ Blog

当华美的叶片落尽,生命的脉络才历历可见。 -- 聂鲁达

常用链接

统计

积分与排名

BBS

Blog

Web

最新评论

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

 

在网上和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位。
中间通过判断去掉空格。

posted on 2007-12-18 15:04 isabc 阅读(14026) 评论(2)  编辑 收藏 引用 所属分类: C++基础

评论

# re: 16进制字符串CString 如何转为 BYTE[] 数组 2007-12-18 18:06 Lee7

(2007-12-18 11:42:34) 松<myri@163.com>
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);
}

  回复  更多评论   

# re: 16进制字符串CString 如何转为 BYTE[] 数组 2008-08-22 09:54 relaxqu

很好,收了  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


广告信息(免费广告联系)

中文版MSDN:
欢迎体验