Python中struct.pack()和struct.unpack()用法详细说明

官方文档

https://docs.python.org/3/library/struct.html

简介

python中的struct主要是用来处理C结构数据的,读入时先转换为Python的字符串类型,然后再转换为Python的结构化类型,比如元组(tuple)啥的~。一般输入的渠道来源于文件或者网络的二进制流

常用函数/方法

  1. struct.pack(formatv1v2)
    功能:打包。将v1,v2等参数的值进行一层包装,包装的方法由format指定。被包装的参数必须严格符合format。最后返回一个包装后的字符串。
  2. struct.unpack(formatbuffer)
    功能:解包。比如使用pack打包的结果,就可以用unpack解包。返回一个由解包数据(type为string的字符串)得到的一个元组(tuple), 即使仅有一个数据也会被解包成元组。其中len(string) 必须等于 calcsize(format),这里面涉及到了一个calcsize函数,请看第3条。
  3. struct.calcsize(format)
    功能:计算format格式所描述的结构的大小

格式化字符串

格式化字符串就是上面讲到的format参数。一般来讲,格式化字符串的第一个字符可以用来描述字节序(主机字节序)大小对齐方式

字节序、大小和对齐方式

Character

Byte orderSizeAlignment
@nativenativenative
=nativestandardnone
<little-endianstandardnone
>big-endianstandardnone
!network (= big-endian)standardnone

如果第一个字符不是上表中字符中的任何一个,则默认为@。native字节序依主机而定是大端模式还是小端模式,可以使用sys.byteorder来判断主机的大小端模式。

格式化字符

FormatC TypePython typeStandard sizeNotes
xpad byteno value
ccharbytes of length 11
bsigned charinteger1(1),(3)
Bunsigned charinteger1(3)
?_Boolbool1(1)
hshortinteger2(3)
Hunsigned shortinteger2(3)
iintinteger4(3)
Iunsigned intinteger4(3)
llonginteger4(3)
Lunsigned longinteger4(3)
qlong longinteger8(2), (3)
Qunsigned long longinteger8(2), (3)
nssize_tinteger(4)
Nsize_tinteger(4)
e(7)float2(5)
ffloatfloat4(5)
ddoublefloat8(5)
schar[]bytes
pchar[]bytes
Pvoid *integer(6)

发表评论

电子邮件地址不会被公开。 必填项已用*标注

18 − 8 =

+ 18 = 19