- 注册时间
- 2011-3-6
- 最后登录
- 1970-1-1
该用户从未签到
|
由于wpe拦截的封包或普通封包都是 "01 02 03 04" 这种格式的,中间有空格的。。。
要转化为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位。
中间通过判断去掉空格。 |
|