📜  Python中的打包pack和拆包unpack参数(1)

📅  最后修改于: 2023-12-03 15:04:36.296000             🧑  作者: Mango

Python中的打包pack和拆包unpack参数

在Python中,我们可以使用struct模块中的pack和unpack函数来对数据进行打包和拆包操作。

pack函数

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函数

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)

需要注意,拆包出来的数据类型可能会与原先打包时的类型存在差异,例如上面示例中的浮点数类型就存在精度损失。因此在拆包后需要进行适当的类型转换处理。