0
>>> import binascii, struct
>>> foo_hex = 'b1e92555'
>>> foo_bin = binascii.unhexlify(foo_hex)
>>> int(foo_hex, 16)
2984846677
>>> struct.unpack('i', foo_bin)[0]
1428548017

为什么这些整数不同?哪种方法是正确的,如何将另一种方法更改为正确的?

4

1 回答 1

4

struct正在使用 little-endian 表示法解释该值,同时使用unhexlify并将int(.., 16)其解释为 big-endian 无符号整数。

使用<or>指定输入的字节顺序,并使用I将其解释为有符号整数:

>>> struct.unpack('>I', foo_bin)[0]
2984846677
>>> struct.unpack('<I', foo_bin)[0]
1428548017

请参阅文档页面的字节顺序、大小和对齐部分。struct

于 2012-12-19T10:37:40.330 回答