Articles

Python struct pack, unpack

Posted on

Python structモジュールは、Python文字列として表現されるPythonの値とC構造体の間の変換を行うことができます。

  • C言語の構造体のレイアウトやPythonの値との変換をコンパクトに記述するためにフォーマット文字列を使用します。
  • 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)

    このスクリプトを実行すると、次のような表現が得られます:
    python struct pack

    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 struct unpack
    明らかに、私たちは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 calcsize

    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 pack_into and unpack_from string buffer

    以上、pythonのstructモジュールの簡単な紹介でした。

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です