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 pack

Pythonのstruct.unpack()

指定された形式で、この関数はパックされた値を元の表現に展開します。この関数は常にタプルを返しますが、要素が一つだけの場合でもです。struct.unpack()関数の例を速く見てみましょう。

import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
print(struct.unpack('hhl', var))
python struct unpack

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 calcsize

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))
Python Struct pack_into and unpack_from string buffer
コメントを残す 0

Your email address will not be published. Required fields are marked *