>>> import binascii, struct
>>> foo_hex = 'b1e92555'
>>> foo_bin = binascii.unhexlify(foo_hex)
>>> int(foo_hex, 16)
2984846677
>>> struct.unpack('i', foo_bin)[0]
1428548017
为什么这些整数不同?哪种方法是正确的,如何将其他方法改为正确?
答案 0 :(得分:4)
struct
使用little-endian表示法解释值,而使用unhexlify
和int(.., 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。