structモジュールの概要

2795 ワード

structの概要
structを使用するとpythonの数値とCの構造の間で変換することができ、表示方式はPython stringsである.一般的には、ファイル内のバイナリデータ(例えば、BMPピクチャ)やネットワーク接続中のメッセージ(例えば、OSPF、EIGRPメッセージコンテンツ)の処理に使用される.
方法:struct.pack(fmt, v1, v2, ...) fmtで規定されたフォーマットに従ってv 1,v 2,...コンテンツはパッケージ化する、パッケージ化(変換)されたバイトコードを返す.struct.pack_into(fmt, buffer, offset, v1, v2, ...) fmtで規定されたフォーマットに従ってv 1,v 2,...コンテンツはパッケージ化する、パッケージ化されたコンテンツをbufferのoffset位置に書き込む.struct.unpack(fmt, string)は、fmtで規定するフォーマットに従ってstring(実はバイトコード)をunpack(復号)し、復号内容をメタグループとして返す.struct.unpack_from(fmt, buffer[, offset=0])は、bufferにおけるoffset位置の先頭のコンテンツをfmtに従って復号し、結果をメタグループ形式で返す.struct.calcsize(fmt)は、fmtが指定したフォーマット変換後のデータ長を返す(unit:Byte)
フォーマットパラメータ:fmt
Order Character
Character
Byte order
Size
Alignment
@
native
native
native
=
native
standard
none
<
little-endian
standard
none
>
big-endian
standard
none
!
network(= big-endian)
standard
none
Format Character
Format
C Type
Python Type
Standard size
x
pad byte
no value c char
string of length 1
1 b signed char
integer
1 B unsigned char
integer
1 ? _Bool
bool
1 h short
integer
2 H unsigned short
integer
2 i int
integer
4 I unsigned int
integer
4 l long
integer
4 L unsigned long
integer
4 q long long
integer
8 Q unsigned long long
integer
8 f float
float
4 d double
float
8 s char[]
string p char[]
string P void *
integer
Examples
Construct the first part of an IP packet
import struct
#69 is  Version and IHL, 0 is TOS, 1420 is Total Length
first_line = struct.pack('>BBH', 69, 0, 1420)  
print(first_line)
> b'E\x00\x05\x8c'

#calculate the length of format '>BBH'
struct.calcsize('>BBH')
> 4   

Unpack a string according to the format character
import struct
s1 = b'E\x00\x05\x8c'
#unpack the string s1 (s1 is Bytes) according to format '>BBH'
result = struct.unpack('>BBH', s1)
print(result)
>(69, 0, 1420)