Pythonのstruct モジュールは、Pythonの値とCの構造体の変換を行うことができます。これらの構造体は、Pythonの文字列として表されます。
Python Struct
- Pythonのstructモジュールは、ファイル、データベース、ネットワーク接続などに格納されているバイナリデータの処理に使用することができます。
- これは、Cの構造体のレイアウトとPythonの値への変換をコンパクトな形式で指定するためにフォーマット文字列を使用します。
Python Structの関数
structモジュールには、pack()
、unpack()
、calcsize()
、pack_into()
、unpack_from()
の5つの重要な関数があります。これらの関数では、バイナリに変換するデータのフォーマットを指定する必要があります。一部の人気のあるフォーマット文字は次のとおりです:
?: 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)
このスクリプトを実行すると、次の表現が得られます:出力の ‘b’ はバイナリを表します。
Python struct.unpack()
この関数は、指定された書式でパックされた値を元の表現に展開します。この関数は常にタプルを返しますが、要素が1つしかない場合でもです。struct unpack()関数の例を簡単に見てみましょう:
import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
print(struct.unpack('hhl', var))
このスクリプトを実行すると、元の表現が得られます:明らかに、Python インタプリタに展開する値の書式を伝える必要があります。
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が文字列バッファを作成するためにインポートされています
import ctypes
# 前述の例に示すように
size = struct.calcsize('hhl')
print(size)
# 'buff'というバッファがctypesから作成されます
buff = ctypes.create_string_buffer(siz)
# struct.pack_into()はデータをbuffにパックし、値を返しません
# struct.unpack_from()はbuffからデータをアンパックし、値のタプルを返します
print(struct.pack_into('hhl', buff, 0, 5, 10, 15))
print(struct.unpack_from('hhl', buff, 0))
このスクリプトを実行すると、次の表現が得られます: これは Python の簡単な紹介のすべてです
struct
モジュール。
Source:
https://www.digitalocean.com/community/tutorials/python-struct-pack-unpack