(参考:/D_R_L_T/article/details/91910774
/w83761456/article/details/21171085?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param)
简介
python中的struct主要用来处理C结构数据的,读入的时候先转换为Python的字符串类型,然后再转换为Python的结构化类型,比如元组。
主要有pack()和unpack()两个方法
主要方法
1、pack()
按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流)
(cfmt,v1,v2,…)
v1,v2,…为C结构数据
cfmt为要包装成的格式
eg:
2、unpack()
按照给定的格式(fmt)解析字节流string,返回解析出来的tuple
(pfmt,aa)
解包
pfmt为python的类型
eg:
3、calcsize()
计算给定的格式(fmt)占用多少字节的内存
clacsize(fmt)
python类型与C类型
Format | C type | python type | STANDARD SIZE |
---|---|---|---|
x | pad type | 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 |
大小端对齐方式
在Format string的首位,有一个可选字符来决定大端和小端
符号 | 对齐方式 |
---|---|
@ | 本机的字符顺序(大端或小端,默认) |
= | 本机的字符顺序(大端或小端,默认) |
< | 小端 |
> | 大端 |
! | 大端 |
如int i = 1
int占4个字节,每个字节8bit
则小端顺序的话为:0000 0000 0000 0000 0000 0000 0000 0001(共32bit)
大端顺序为:0000 0001 0000 0000 0000 0000 0000 0000