>>> import binascii, struct
>>> foo_hex = 'b1e92555'
>>> foo_bin = binascii.unhexlify(foo_hex)
>>> int(foo_hex, 16)
2984846677
>>> struct.unpack('i', foo_bin)[0]
1428548017
为什么这些整数不同?哪种方法是正确的,如何将另一种方法更改为正确的?
>>> import binascii, struct
>>> foo_hex = 'b1e92555'
>>> foo_bin = binascii.unhexlify(foo_hex)
>>> int(foo_hex, 16)
2984846677
>>> struct.unpack('i', foo_bin)[0]
1428548017
为什么这些整数不同?哪种方法是正确的,如何将另一种方法更改为正确的?
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