struct

Cの構造体データの相互変換

タグ struct


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を用いて変換すると企画に則った処理を行うことができる