看流星社区

 找回密码
 注册账号
查看: 3259|回复: 0

VC6将16进制封包字符串转化为16进制数值的BYTE数组

[复制链接]

该用户从未签到

发表于 2013-5-4 08:40:41 | 显示全部楼层 |阅读模式
由于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位。
中间通过判断去掉空格。
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-15 02:50

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表