需求:
16进制字符串CString如何转为BYTE[]数组
CString str ="56 45 52 30 30";
BYTE buf[64];
赋值后
buf[64] = {0X56,0X45,0X52,0X30,0X30};
int CCP210xSerialTestDlg::Str2Hex(CString str, unsigned char *data)
{
unsigned int t;
int Length;
int len=str.GetLength();
char a[10]={0};
Length=0;
for(int i=0; i<len; )
{
if(str[i]==' ') //空格
{
i++;
continue;
}
a[0]=str[i]; // high byte
i++;
if (i>=len)
{
break;
}
a[1]=str[i]; // low byte
a[2]='/0'; // 字符串结束标志
t=strtoul(a,NULL,16); //将字符串转换成无符号长整型数
data[Length]=(unsigned char)t;
Length++;
i++;
}
return Length; //转换的字节数
}
处理这类问题的方法很多,我的方法的特点在于使用了strtoul()函数。
虽然可行,但我还是有疑问,CString类可以直接用数组下标的方式(str[i])访问吗?感觉是不可以这样做,却能解决问题,很纳闷。希望有高手指点一下,不胜感谢。
傅绍兵
2010-11-11