您的位置:首页 > 其它

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

2010-05-09 14:12 232 查看

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: