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は、リトルエンディアン表記を使用して値を解釈しますが、ビッグエンディアンの符号なし整数として使用unhexlifyおよび解釈します。int(.., 16)

<またはを使用>して入力のエンディアンを指定し、を使用Iしてそれを符号付き整数として解釈します。

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

ドキュメントページの「バイトオーダー、サイズ、および配置」セクションを参照してください。struct

于 2012-12-19T10:37:40.330 に答える