Cの構造体データの相互変換
C言語の構造体データとpythonのデータには互換性がないが、struct
モジュールを利用すると相互変換できる
公式ドキュメント
例
>>> import struct
>>> struct.pack(">?", 1) # bool
b'\x01'
>>> struct.pack(">i", 1) # int
b'\x00\x00\x00\x01'
>>> struct.pack(">I", 1) # unsigned int
b'\x00\x00\x00\x01'
>>> struct.pack(">L", 1) # long
b'\x00\x00\x00\x01'
>>> struct.pack(">Q", 1) # unsinged long long
b'\x00\x00\x00\x00\x00\x00\x00\x01'
>>> struct.pack(">q", 1) # long long
b'\x00\x00\x00\x00\x00\x00\x00\x01'
>>> struct.pack(">f", 1) # float
b'?\x80\x00\x00'
>>> struct.pack(">d", 1) # double
b'?\xf0\x00\x00\x00\x00\x00\x00'
ユースケース
TOTPを計算するときなどRFCでC言語の入力が期待されるので、struct
を用いて変換すると企画に則った処理を行うことができる