ホームページ  >  記事  >  バックエンド開発  >  Python での struct.pack() と struct.unpack() の使用法の詳細な説明

Python での struct.pack() と struct.unpack() の使用法の詳細な説明

高洛峰
高洛峰オリジナル
2017-03-16 16:02:0113516ブラウズ

python python の struct は、主に C 構造体データを処理するために使用され、読み取り時に、まず Python の
string

型に変換され、次に tuple~ などの Python の構造化型に変換されます。一般に、入力チャネルはファイルまたはネットワーク バイナリ ストリームから取得されます。

1.struct.pack() と struct.unpack() 変換プロセスでは、主に 書式設定文字列(format

string

s) が変換方法と形式を指定するために使用されます。

主なメソッドについて説明します:

1.1 struct.pack(fmt, v1, v2,...)

v1、v2 およびその他のパラメーターの値を 1 つのレイヤーにパックします。パッケージ化方法は次のように指定されます。 fmt 。ラップされたパラメータは fmt に厳密に準拠する必要があります。最後に、ラップされた文字列が返されます。

1.2 struct.unpack(fmt,string) 名前の通り、解凍します。たとえば、pack はパッケージ化され、unpacked は解凍に使用できます。データ(文字列)をアンパックしたタプルを返します。データが1つだけの場合でもタプルにアンパックされます。このうち、len(string) は calcsize(fmt) と等しくなければならず、これには calcsize

関数

が関係します。 struct.calcsize(fmt): fmt形式で記述された構造体のサイズを計算するために使用されます。

フォーマット文字列は 1 つ以上のフォーマット文字で構成されます。これらのフォーマット文字の説明については、次の Python マニュアルを参照してください: Python での struct.pack() と struct.unpack() の使用法の詳細な説明

2. コード例

import struct 
# native byteorder 
buffer = struct.pack("ihb", 1, 2, 3) 
print repr(buffer) 
print struct.unpack("ihb", buffer) 
# data from a sequence, network byteorder 
data = [1, 2, 3] 
buffer = struct.pack("!ihb", *data)
print repr(buffer) 
print struct.unpack("!ihb", buffer)
 
Output:
'\x01\x00\x00\x00\x02\x00\x03'
(1, 2, 3)
'\x00\x00\x00\x01\x00\x02\x03'
(1, 2, 3)
まず、パラメータ 1、2、3 を変更します。パックされる前は、1,2,3 は明らかに Python のデータ型integer に属します。パックされた後は、Python の文字列型に変換すると、'x01x00x00x00x02x00x03 と表示されます。 '。このマシンはリトル エンディアン ('リトル
end

ian') であるため、ビッグ エンディアンとリトル エンディアンの違いについてはここを参照してください。したがって、上位ビットは下位アドレス セグメントに配置されます。i は int 型を表しますC 構造体では、このマシンは 4 ビットを占有するため、1 は 01000000 として表され、h は C 構造体では short 型を表し、2 ビットを占有するため、同様に 0200 として表され、b は C 構造体では signed char 型を表します。 1ビットを占めるので、03と表されます

その他、特殊なものについては公式ドキュメントのマニュアルを参照してください

フォーマット文字列の先頭にあります。は、ビッグ エンディアンとリトル エンディアンを決定するためのオプションの文字です。リストは次のとおりです: Python での struct.pack() と struct.unpack() の使用法の詳細な説明

追加されない場合、ネイティブの文字順序 (ビッグ エンディアンまたはリトル エンディアン) が使用されている場合でも、デフォルトは @ です。 C 構造体のサイズとメモリ内のアライメントはネイティブ マシン (ネイティブ) と一致します。たとえば、一部のマシンは 2 ビットの整数を持ち、一部のマシンは 4 ビットのアライメントを持ちます。 n ビットのアライメントを持つものもあります (n は不明で、その数もわかりません)

🎜 次のように説明される標準オプションもあります。 標準を使用すると、どの型にもメモリ アライメントがありません 🎜

たとえば、先ほどのアプレットの後半で、使用されている書式文字列の最初の桁は!これはビッグエンディアン モードの標準アライメントであるため、出力は「x00x00x00x01x00x02x03」となり、上位ビット自体がメモリの上位アドレス ビットに配置されます。


以上がPython での struct.pack() と struct.unpack() の使用法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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