プロジェクト

全般

プロフィール

Pythonでバイナリデータを扱う

バイナリの比較

bytes型のデータをリテラルと比較

contents = file.read()
magic_word = contents[:4]
if magic_word == b'\xca\xfe\xba\xbe':
    print('Java class file')

ビット操作

ビットマスク

ビット演算を使う

整数型のデータに対して2進数リテラルを指定してビット積を取ります。

  • 整数の先頭3bitをマスクし、3bitの値を取る例
    ver = (data & 0b1110_0000) >> 5
    

bytes型の場合は、整数に変換してからビット演算をします。整数変換時は、bytes型の並びがビッグエンディアンかリトルエンディアンかを指定します。

data = int.from_bytes(bytes, "big")