从相同的Python字节字符串派生的不同整数

时间:2012-12-19 10:27:50

标签: python binary python-2.7 hex bytearray

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

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

1 个答案:

答案 0 :(得分:4)

struct使用little-endian表示法解释值,而使用unhexlifyint(.., 16)将其解释为big-endian无符号整数。

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

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

请参阅struct文档页面的Byte Order, Size and Alignment section