struct模块
struct模块用于将Python中的bytes类型对象和C语言中的struct进行转换,一般用于处理存储在文件或网络中的二进制文件,使用struct模块时需要指定一个格式规范,来对字节大小、顺序、对齐等进行约束。
常用方法:
struct.pack(fmt,v1,v2,…):以一个struct格式化字符串以及一个或多个值为参数,返回一个bytes对象,其中存放的是按照该格式规范表示的所有的这些参数值。
struct.unpack(fmt,buffer):以一个格式规范和一个bytes/bytearray对象为参数(缓冲区),返回一个元组,缓冲区的大小必须和格式规范fmt保持一致。
struct.calcsize(fmt):返回格式规范fmt的大小,和pack()打包后的bytes对象大小一致。
格式规范字符串
格式字符串是在打包和解包数据时用于指定预期布局的机制,它们由格式字符构成,它指定了打包/解压缩数据的类型。另外,还有用于控制字节顺序,大小和对齐的特殊字符。指定的一些值如下,下表来自于python官方文档,更多细节请参考Python官方文档struct模块
Format | C Type | Python type | Standard size | Notes |
---|---|---|---|---|
x | pad byte | no value | ||
c | char | bytes of length | 1 | 1 |
b | signed char | integer | 1 | (1),(3) |
B | unsigned char | integer | 1 | (3) |
? | _Bool | bool | 1 | (1) |
h | short | integer | 2 | (3) |
H | unsigned short | integer | 2 | (3) |
i | int | integer | 4 | (3) |
I | unsigned | int | integer | 4 |
l | long | integer | 4 | (3) |
L | unsigned long | integer | 4 | (3) |
q | long long | integer | 8 | (2), (3) |
Q | unsigned long | long | 8 | (2), (3) |
n | ssize_t | integer | (4) | |
N | size_t integer | integer | (4) | |
e | (7) | float | 2 | (5) |
f | float | float | 4 | (5) |
d | double | float | 8 | (5) |
s | char[] | bytes | ||
p | char[] | bytes | ||
P | void *</ |