Pythonでは、エンディアンを扱うためのいくつかの方法があります。エンディアンとは、バイトオーダー(バイトの並び順)のことを指します。ビッグエンディアンとリトルエンディアンの2種類があり、それぞれ異なるバイトオーダーを持っています。
intからbytesへの変換
Pythonでは、int
型の数値をbytes
型に変換することができます。これにはto_bytes
メソッドを使用します。以下に例を示します。
n = 0b1111000111110010 # 2バイトの数値
# ビッグエンディアン
bytes_big = n.to_bytes(2, 'big') # b'\xf1\xf2'
# リトルエンディアン
bytes_little = n.to_bytes(2, 'little') # b'\xf2\xf1'
bytesからintへの変換
bytes
型からint
型への変換も可能です。これにはfrom_bytes
メソッドを使用します。
# ビッグエンディアン
int_big = int.from_bytes(b'\xf1\xf2', 'big') # 61938
# リトルエンディアン
int_little = int.from_bytes(b'\xf2\xf1', 'little') # 61938
structモジュールを使った方法
Pythonのstruct
モジュールを使うと、さまざまな型のデータをバイト列にパックしたり、バイト列からデータをアンパックしたりすることができます。
import struct
n = 0b1111000111110010
# 2バイト(符号なし)でビッグエンディアン
bytes_big = struct.pack(">H", n) # b'\xf1\xf2'
# 4バイト(符号あり)でリトルエンディアン
bytes_little = struct.pack("<l", n) # b'\xf2\xf1\x00\x00'
以上、Pythonでエンディアンを扱う基本的な方法について説明しました。これらの知識を活用して、バイナリデータの操作に挑戦してみてください。