Pythonのstructモジュールのpack、unpack関数
Pythonのstructモジュールは、Pythonの値とCの構造体との変換を行うことができます。Cの構造体はPythonの文字列として表されます。
PythonのStruct
- Python struct module can be used in handling binary data stored in files, database or from network connections etc.
- It uses format Strings as compact descriptions of the layout of the C structs and the intended conversion to/from Python values.
PythonのStruct関数
structモジュールには5つの重要な機能があります – pack()、unpack()、calcsize()、pack_into()およびunpack_from()。これらのすべての機能では、バイナリに変換するデータの形式を指定する必要があります。一部の人気のある形式文字は次のとおりです:
?: boolean
h: short
l: long
i: int
f: float
q: long long int
ここでは、フォーマット文字の完全なリストを取得することができます。それでは、struct モジュールの関数を一つずつ見ていきましょう。
Pythonのstruct.pack()
この関数は、指定された型の文字列表現に値のリストを詰め込む機能です。引数は、フォーマットが必要とする値と完全に一致する必要があります。では、struct pack() の例を早速見てみましょう。
import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
var = struct.pack('iii', 10, 20, 30)
print(var)
Pythonのstruct.unpack()
指定された形式で、この関数はパックされた値を元の表現に展開します。この関数は常にタプルを返しますが、要素が一つだけの場合でもです。struct.unpack()関数の例を速く見てみましょう。
import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
print(struct.unpack('hhl', var))
Pythonのstruct calcsize()を日本語で言い換えると、次のようになります:
Pythonのstruct calcsize()関数
この機能は、与えられたフォーマットで構造体の文字列表現のサイズを計算して返します。サイズはバイト単位で計算されます。以下は、コードスニペットの例を簡単に見てみましょう。
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 buffer
import ctypes
# As shown in previous example
size = struct.calcsize('hhl')
print(size)
# Buffer 'buff' is created from ctypes
buff = 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 values
print(struct.pack_into('hhl', buff, 0, 5, 10, 15))
print(struct.unpack_from('hhl', buff, 0))