This question already has answers here:
Closed 4 years ago.
insert array of hex codes into an integer
(2个答案)
我正在尝试转换
0x93e1c829


2481047593

我的十六进制序列存储在一个无符号字符数组中,打印时该数组看起来像0xf8, 0xff, 0x89, 0x6b
我用过
unsigned char number[4];
// populate the array
unsigned long expected_value = (unsigned long) (*((unsigned int*) number))

我很确定我遗漏了一些很简单的东西,但却找不到。上面的逻辑告诉我:将char数组转换成整数数组,然后取整数的值并将其转换成无符号long。
但是,当我这样做的时候
printf("%lu", expected_value);

我明白了
701030803

参考:
使用
http://www.binaryhexconverter.com/hex-to-decimal-converter
我发现期望值是2481047593

最佳答案

你所拥有的实际上是有效的,但你却遇到了小问题/大问题。
十进制值实际上等于十六进制数,但顺序相反。
你的字符有7010308030x29c8e1930x930xe1这可能是它们存储在内存中的方式,但是在一个小的endian环境中,较高的内存地址是最重要的字节。
一个快速的“n”脏修复方法是在将字节作为整数处理之前简单地交换字节,或者用如下方法自己构造它:

unsigned long expected_value =
    number[3] << 24 ||
    number[2] << 16 ||
    number[1] <<  8 ||
    number[0];

如果您所处的环境提供了它们(如POSIX),则可以使用一些函数来完成此工作,如0xc8(主机格式到网络格式,长类型)。

10-04 12:24
查看更多