struct模块
函数和异常
struct.error:异常
struct.pack(format,v1,v2,…):根据格式字符串打包,参数必须与格式所需的值匹配,返回字节对象
struct.pack_into(format, buffer, offset,v1, v2,…):根据格式字符串打包,且将其从偏移offset(必须参数)位置写入可写入的字节对象buffer.
struct.unpack(format, buffer):根据格式字符串解包,返回一个元组.
struct.unpack_from(format, buffer, offset=0):从偏移处offset开始解包
struct.iter_unpack(format, buffer):根据格式字符串格式从字节对象buffer中迭代解压缩,返回一个迭代器,字节对象大小是格式所需大小的倍数
struct.calcsize(format):返回格式字符串对应的struct大小
格式字符串
字节序,大小,对齐:
字符 | 字节顺序 | 大小 | 对齐 |
---|---|---|---|
@ | 本地序 | 本地 | 本地 |
= | 本地序 | 标准 | 无 |
< | 小端序 | 标准 | 无 |
> | 大端序 | 标准 | 无 |
! | 网络序(大端) | 标准 | 无 |
+ sys.byteorder可以检查本地序
+ 标准大小取决与格式字符
格式字符:
格式 | C类型 | Python类型 | 标准大小 |
---|---|---|---|
x | 填充字节 | no value | |
c | char | bytes of length 1 | 1 |
b | signedchar | integer | 1 |
B | unsignedchar | integer | 1 |
? | _Bool | bool | 1 |
h | short | integer | 2 |
H | unsignedshort | integer | 2 |
i | int | integer | 4 |
I | unsignedint | integer | 4 |
l | long | integer | 4 |
L | unsignedlong | integer | 4 |
q | longlong | integer | 8 |
Q | unsignedlonglong | integer | 8 |
n | ssize_t | integer | 本地大小 |
N | size_t | integer | 本地大小 |
e | (7) | float | 2 |
f | float | float | 4 |
d | double | float | 8 |
s | char[] | bytes | |
p | char[] | bytes | |
P | void* | integer | 本地大小 |
+ 格式字符前整数表示重复计数,例如’4h’=’hhhh’,对于’s’表示单个字节字符串长度
+ 格式之间的空白字符被忽略,计数及其格式不得包含空格
+ 格式字符的排序可能会对大小产生影响,因为满足对齐要求所需的填充是不同的
类
class struct.Struct(format):根据格式字符串读取二进制数据,更高效,格式字符只需要编译一次,方法功能与函数相同,不需要传入格式字符串
pack()
pack_into()
unpack()
unpack_from()
iter_unpack()
format
size