Python structモジュールは、Python文字列として表現されるPythonの値とC構造体の間の変換を行うことができます。
Pythonの構造体関数
構造体モジュールには5つの重要な関数があります – pack()
unpack()
calcsize()
pack_into()
unpack_from()
です。
よく使われるフォーマット文字は次のとおりです。
?: booleanh: shortl: longi: intf: floatq: long long int
フォーマット文字の完全なリストはこちらをご覧ください。
Python struct.pack()
この関数は、値のリストを、指定された型の文字列表現にパックします。 引数はフォーマットで要求される値と正確に一致しなければなりません。 struct pack()の例を見てみましょう:
import structvar = struct.pack('hhl', 5, 10, 15)print(var) var = struct.pack('iii', 10, 20, 30)print(var)
このスクリプトを実行すると、次のような表現が得られます:
struct
モジュールの紹介です。
Outputの’b’はbinaryを意味していることに注意してください。
Python struct.unpack()
この関数は、パックされた値を指定されたフォーマットで元の表現に展開します。 この関数は、要素が1つしかない場合でも、常にタプルを返します。 早速、struct unpack()関数の例を見てみましょう:
import structvar = struct.pack('hhl', 5, 10, 15)print(var)print(struct.unpack('hhl', var))
このスクリプトを実行すると、元の表現が戻ってきます。
明らかに、私たちはPythonインタープリタに、値をアンパックする必要があるフォーマットを伝えなければなりません。
Python struct calcsize()
この関数は、与えられたフォーマットを持つstructのString表現のサイズを計算して返します。
サイズはバイト単位で計算されます。
import struct var = struct.pack('hhl', 5, 10, 15)print(var)print("Size of String representation is {}.".format(struct.calcsize('hhl')))
このスクリプトを実行すると、次のような表現が得られます。
Python struct pack_into(), unpack_from()
これらの関数は、文字列バッファに値をパックしたり、文字列バッファからアンパックしたりすることができます。 これらの関数はバージョン2.5で導入されました。
import struct# ctypes is imported to create a string bufferimport ctypes# As shown in previous examplesize = struct.calcsize('hhl')print(size)# Buffer 'buff' is created from ctypesbuff = ctypes.create_string_buffer(siz)# struct.pack_into() packs data into buff and it doesn't return any value# struct.unpack_from() unpacks data from buff, returns a tuple of valuesprint(struct.pack_into('hhl', buff, 0, 5, 10, 15))print(struct.unpack_from('hhl', buff, 0))
このスクリプトを実行すると、次のような表示になります:
以上、pythonのstruct
モジュールの簡単な紹介でした。