python - 計算 - 整数として3バイトを読む




スタッキング 解析 (2)

3.2から、 intは新しいメソッド.from_bytes開発したので、 struct.unpack代わりに以下を使用することができます。

int.from_bytes(b'\x00\x00\x01', 'big')  
# 1

参照については、 http://docs.python.org/dev/library/stdtypes.html#int.from_byteshttp://docs.python.org/dev/library/stdtypes.html#int.from_bytes参照してください。

3バイトを整数として読み取るにはどうすればいいですか?

struct moduleはそのようなものを提供しますか?

3バイトで読み込み、余分な\ x00を追加してから4バイトの整数として解釈することはできますが、これは不要のようです。


python 2の代わりにstructモジュールを使わないでください。

>>> s = '\x61\x62\xff'
>>> a = sum([ord(b) * 2**(8*n) for (b, n) in zip(s, range(len(s))[::-1])])
>>> print a
6382335

バイト順序はビッグエンディアンです。 これは、 answerと同じ結果にます。

>>> print struct.unpack('>I', '\x00' + s)[0]
6382335

リトルエンディアンのバイト順の場合、変換は次のようになります。

>>> a = sum([ord(b) * 2**(8*n) for (b, n) in zip(s, range(len(s)))])
>>> print a
16736865
>>> print struct.unpack('<I', s + '\x00')[0]
16736865






python