💭

bytes ⇒ 整数値の変換 (python)

2022/02/12に公開

bytes ⇒ 整数値の変換 (python)

bytes データ⇒ 整数値に変換するとき int.from_bytes を使う。

byteorder の引数にビッグエンディアンかリトルエンディアンか指定する。
でもマシンのネイティブのエンディアンを使いたい場合 sys.byteorder を使う。

https://docs.python.org/ja/3/library/stdtypes.html#int.from_bytes の説明そのまんまなんだけど。

実証コード

#!/usr/bin/python3

import sys

def dump(data):
    print(data)
    a = int.from_bytes(data, byteorder='big')
    b = int.from_bytes(data, byteorder='little')
    # この記事で言いたいことは  byteorder=sys.byteorder の部分だけ
    c = int.from_bytes(data, byteorder=sys.byteorder)
    print(a, hex(a))
    print(b, hex(b))
    print(c, hex(c))

dump(b'\x01\x02')
dump(b'\x11\x12\x13\x14\x15\x16\x17\x18\x19') # 9バイトのデータ

実行結果 (little endian の PC で実行)

$ ./bytes.py
b'\x01\x02'
258 0x102
513 0x201
513 0x201
b'\x11\x12\x13\x14\x15\x16\x17\x18\x19'
314897056051100063769 0x111213141516171819
462904482303900324369 0x191817161514131211
462904482303900324369 0x191817161514131211

参考

https://docs.python.org/ja/3/library/stdtypes.html#int.from_bytes

https://docs.python.org/ja/3/library/sys.html#sys.byteorder

Discussion