ホームページ >バックエンド開発 >Python チュートリアル >Python 構造体バイト ストリーム、グループ化およびアンパック実装モジュールの詳細な説明

Python 構造体バイト ストリーム、グループ化およびアンパック実装モジュールの詳細な説明

高洛峰
高洛峰オリジナル
2017-03-17 16:21:092047ブラウズ

英語の struct という単語は誰もがよく知っているはずです。C/C++ には struct があり、struct は structur と呼ばれます。 Struct は Python でも使用されており、この構造体が C/C++ の構造体と深い起源を持つ必要があることを十分に示しています。 Python は、struct モジュールを使用して Python 値と C 構造体間の変換を実行し、Python バイト オブジェクトを形成します。基礎となる C 構造の簡潔な記述として形式 string を使用し、この形式文字列に基づいて Python 値に変換します。

Python では 6 つのデータ型、文字列、整数、浮動小数点数、リスト、タプル、辞書のみを定義していることがわかっています。しかし、C言語にはバイト型の変数がいくつかありますが、それらをPythonで実装するにはどうすればよいですか?これは、特にデータがネットワーク上で転送される場合には非常に重要です。

Python は、変換を行うための struct モジュールを提供します。このモジュールにはいくつかのメソッドがあります。

pack(fmt, v1, v2, ...) ------- 値 v1, v2, ... を、指定された fmt で記述された形式に従って文字列に変換します。

unpack(fmt, bytes) ------- 指定された fmt で記述された形式に従ってバイトを逆解析し、タプルを返します。

calcsize(fmt) ------- 指定された fmt で記述された形式に従って構造体のサイズを返します。

struct.pack():

struct.packは、フォーマット文字に従ってPythonの値を文字列に変換するために使用されます(Pythonにはバイト(Byte)型がないため、ここでの文字列はバイトとして理解できます)ストリーム 、またはバイト配列)。関数のプロトタイプは struct.pack(fmt, v1, v2, ...) で、パラメーター fmt はフォーマット文字列です。フォーマット文字列に関する関連情報は以下に紹介されています。 v1、v2、... は変換される Python 値を表します。次の例では、2 つの整数を文字列 (バイト ストリーム) に変換します。 ;> str=struct.pack('ii',a,b) #バイトストリームに変換します、まだ文字列ですがネットワーク上で送信できます

>>> str) #Binary は意味不明

> ここからはやりたいことを何でもできる パッキングが完了しました。たとえば、次のパッケージング例ではパックのみが紹介されています

format = "!HH%ds" % len(data)

buffer = struct.pack(format,opcode,blocknumber,data) 以下のフォーマット文字情報に基づいて、データをパックし、いくつかのヘッダーを追加する必要があります。H は符号なし、short は 2 バイト、s であることがわかります。 char型です。したがって、このバッファは 2 バイトのオペコード、2 バイトのブロック番号、および len-long char です。

Python モジュール - 構造体 (バイト ストリーム、パッキングとアンパックの実装)

struct.unpack():

上記の例を実行してみましょう:

>>> a1,a2=struct .unpack(' ii',str)

>>> print 'a1',a1

a1 20

>>> print 'a2=',a2

a2= 400

「ii」を参照してください。 " は、8 バイトの str を 4 バイトを境界として 2 つの int 型整数に分割します。

struct.calcsize(): 特定の形式での出力のサイズを計算するために使用されます。これは次のようなものです:

>>> struct.calcsize('HH4s')

8

>> ;> struct.calcsize('ii')

8

>>>

>>> format='!HH%ds' % len('hello Python')

>> struct.calcsize(形式)

>>>

以上がPython 構造体バイト ストリーム、グループ化およびアンパック実装モジュールの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。