2
我想将文件中的十六进制数转换为整数。
字符串看起来是这样的:
\0\0\x05\xa0
这应该是1440。如果我尝试:
int i = '\x05'
我得到5
。C将十六进制值“ xHH”转换为整数
但是,如果我这样做\xa0
我得到-96
。
任何想法如何正确地转换字符串?
我想将文件中的十六进制数转换为整数。
字符串看起来是这样的:
\0\0\x05\xa0
这应该是1440。如果我尝试:
int i = '\x05'
我得到5
。C将十六进制值“ xHH”转换为整数
但是,如果我这样做\xa0
我得到-96
。
任何想法如何正确地转换字符串?
这看起来像一个big-endian号码。
假设你有四个(没有,如果你表现出的字节串12,我假设他们是二进制字节)的unsigned char data[4]
一个字节数组,你应该能够像这样转换:
const unsigned int x = (data[0] << 24) | (data[1] << 16) |
(data[2] << 8) | data[3];
如果我们在您的数据插入:
以上变为:
const unsigned int x = (0 << 24) | (0 << 16) | (5 << 8) | 160;
,正如预期的那样,这只是256 * 5 | 160
= 1280 | 160
= 1440
。
不错!谢谢! –
这是一个实际的文本字符串,或者在一个可以显示二进制数据的程序中查看的数据吗? –
另外,'-96'是'0xa0'的有符号值。 –
它实际上是一个PNG头。我写了一个简单的c程序,可以从PNG图像中读取大小。 –