首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

16入转字符

2013-03-16 
16进转字符CString sz \x00\x00\x00\x00\x02\xdd\xa5\x23我想把上面的16进制字符串转换成普通的字符串

16进转字符
CString sz = "\x00\x00\x00\x00\x02\xdd\xa5\x23"
我想把上面的16进制字符串转换成普通的字符串。我的意思就是把其中的\x00或者\xa5转化成字符。如何转换?谢谢了!
[解决办法]
MultiByteToWideChar

剩下的,查询MSDN吧
[解决办法]
电脑内存只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。

为什么要有数据结构这个东东?
因为要将现实世界或者抽象理论中的各种数据保存在计算机外存(光盘、硬盘、U盘……)或内存(ROM、RAM、SRAM……)里面的二进制字节数组中。
然后让CPU这个只会执行预先保存好的加减乘除移位条件转移……等机器指令的家伙按照人的意志去处理这些数据。至于具体如何处理就是所谓算法。


[解决办法]
这个只能自己解析了,每次把字符串里的字符取出一个,先判定是数字还是英文字母,数字减0,英文减a+10
然后累加到临时变量里面,每多一个字符就把这个临时变量乘以16,最终的结果保存的一个字符串里面,遇到""表示新字符开始,遇到0结束,最后在字符串末尾加一个0,printf输出ok
[解决办法]

#include <stdio.h>

int main()
{
char* src = "808182838485";
char str[64];
for(int i=0; *src; i+=2)
{
sscanf(src, "%2d", str+i/2);//按照你给的例子是十进制转换为字符 不是十六进制
src+=2;
}
puts(str);
return 0;
}

[解决办法]
#include <stdio.h>
int main()
{
    const char* src = "f4686559cabe8b61dab83d44db457c2a";
    unsigned char str[64];
    for(int i=0; *src; i+=2)
    {
        sscanf(src, "%2x", str+i/2);
        src+=2;
    }
    puts(str);
    return 0;
}


需要注意的是 f4 == 244 超出了ascii的范围 会输出什么字符依赖具体环境了

热点排行