>>> 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
は、リトルエンディアン表記を使用して値を解釈しますが、ビッグエンディアンの符号なし整数として使用unhexlify
および解釈します。int(.., 16)
<
またはを使用>
して入力のエンディアンを指定し、を使用I
してそれを符号付き整数として解釈します。
>>> struct.unpack('>I', foo_bin)[0]
2984846677
>>> struct.unpack('<I', foo_bin)[0]
1428548017
ドキュメントページの「バイトオーダー、サイズ、および配置」セクションを参照してください。struct