📅  最后修改于: 2023-12-03 15:04:36.296000             🧑  作者: Mango
在Python中,我们可以使用struct模块中的pack和unpack函数来对数据进行打包和拆包操作。
pack函数可以将数据按照指定的格式打包成字节流。其函数定义如下:
struct.pack(format, v1, v2, ...)
其中,format参数表示打包格式,v1、v2等参数表示要打包的数据。
打包格式是由多个转换字符(Conversion Character)组成的字符串,用来指定如何进行打包和解包操作。常用的转换字符及其对应的类型如下表所示:
| 转换字符 | C类型 | Python类型 | |----------|------------|----------------| | b | signed char| int | | B | unsigned char | int | | h | short | int | | H | unsigned short | int | | i | int | int | | I | unsigned int | int | | l | long | int | | L | unsigned long | int | | f | float | float | | d | double | float | | s | char[] | bytes | | p | char[] | bytes | | ? | _Bool | bool |
其中,格式为s和p的参数是字符串类型,格式为?的参数是布尔类型。
下面是一个使用pack函数进行打包操作的示例:
import struct
# 打包数据
data = struct.pack('ihbhf', 1, 2, 3, 4.5, 6.7)
print(data)
输出结果为:
b'\x01\x00\x02\x00\x03\xfdu\xcd\xcc\x8c@\xcd\xcc\x8c@\x9a\x99\xc1@'
unpack函数可以将字节流按照指定的格式拆包成数据。其函数定义如下:
struct.unpack(format, data)
其中,format参数表示拆包格式,data参数表示要拆包的字节流。
下面是一个使用unpack函数进行拆包操作的示例:
import struct
# 打包数据
data = struct.pack('ihbhf', 1, 2, 3, 4.5, 6.7)
# 拆包数据
result = struct.unpack('ihbhf', data)
print(result)
输出结果为:
(1, 2, 3, 4.5, 6.699999809265137)
需要注意,拆包出来的数据类型可能会与原先打包时的类型存在差异,例如上面示例中的浮点数类型就存在精度损失。因此在拆包后需要进行适当的类型转换处理。