我想将文件中的十六进制数转换为整数。
该字符串如下所示:
\0\0\x05\xa0
这应该是 1440。如果我尝试:
int i = '\x05'
我得到5
。
但是如果我对 \xa0
执行相同的操作,我会得到 -96
。
有什么想法如何正确转换字符串吗?
最佳答案
这看起来像 big-endian数量。
假设您在 unsigned char data[4]
数组中有 4 个字节(不是 12 个字节,就好像您显示的字节是一个字符串;我假设它们是二进制字节),你应该能够像这样转换:
const unsigned int x = (data[0] << 24) | (data[1] << 16) |
(data[2] << 8) | data[3];
如果我们插入您的数据:
const unsigned char data[] = { 0, 0, 0x5, 0xa0 };
上面变成:
const unsigned int x = (0 << 24) | (0 << 16) | (5 << 8) | 160;
这只是256 * 5 | 160 = 1280 | 160 160
= 1440
,正如预期的那样。
关于C 将十六进制值 "\xHH"转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15765346/