有的时候需要用python
处理二进制数据,比如,存取文件,socket
操作时.这时候,可以使用python
的struct
模块来完成.可以用 struct
来处理c
语言中的结构体.
struct
模块中最重要的三个函数是
-
pack()
,
pack(fmt, v1, v2, ...)
按照给定的格式(fmt)
,把数据封装成字符串(实际上是类似于c结构体的字节流) -
unpack()
,
unpack(fmt, string)
按照给定的格式(fmt)
解析字节流string
,返回解析出来的tuple -
calcsize()
calcsize(fmt)
计算给定的格式(fmt)
占用多少字节的内存
struct
中支持的格式如下表:
Format | C Type | Python | 字节数 |
---|---|---|---|
x | pad byte | no value | 1 |
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 or long | 4 |
l | long | integer | 4 |
L | unsigned | long | long 4 |
q | long long | long | 8 |
Q | unsigned long | long long | 8 |
f | float | float | 4 |
d | double | float | 8 |
s | char[] | string | 1 |
p | char[] | string | 1 |
P | void * | long |
常用:
import struct
a = 12.34
#将浮点数a变为二进制
bytes = struct.pack('f',a)
#转换回float
floats = struct.unpack('f', bytes)
b=10
#将整数b变为二进制
bytes = struct.pack('i',b)
#转换回int
int = struct.unpack('i', bytes)
网友评论