📜  python struct pack - Python (1)

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

Python struct pack

Python 中的 struct pack 功能是将给定的数据转换为字符串的一种格式化工具。它能够将 Python 对象编码成二进制数据或者将二进制数据解码成 Python 对象。类似于 C 语言中的格式化输入输出函数,例如 printf 和 scanf。

语法
struct.pack(format, *args)

其中,参数 format 是转换格式字符串,*args 是传入的参数。

转换格式字符

| 转换格式字符 | C 语言数据类型 | Python 数据类型 | 字节数 | | ------ | ------ | ------ | ------ | | x | 无效占位符 | 无对应类型 | 1 | | c | char | 字符串 | 1 | | b | signed char | 整型 | 1 | | B | unsigned char | 整型 | 1 | | ? | _Bool | 布尔型 | 1 | | h | short | 整型 | 2 | | H | unsigned short | 整型 | 2 | | i | int | 整型 | 4 | | I | unsigned int | 整型 | 4 | | l | long | 整型 | 4 | | L | unsigned long | 整型 | 4 | | q | long long | 整型 | 8 | | Q | unsigned long long | 整型 | 8 | | f | float | 浮点型 | 4 | | d | double | 浮点型 | 8 | | s | char[] | 字符串 | n | | p | char[] | 字符串 | n | | P | void * | 整型 | 4 |

其中,字节数默认为 1,可以通过数字前缀指定。

示例
import struct

# 整型转化为二进制
i = 1024
struct.pack('I', i) # b'\x00\x04\x00\x00'

# 多个整型转化为二进制
i1, i2 = 1024, 2048
struct.pack('II', i1, i2) # b'\x00\x04\x00\x00\x00\x08\x00\x00'

# 将多个数据打包到一个字符串中
i, s, f = 1024, 'hello, world', 3.14159
struct.pack('I11s?f', i, s.encode('utf-8'), f) # b'\x00\x04\x00\x00hello, world\x00\x00\x00\x00\x00\x00\x00\x99\x0f\xdb\x0fI'

# 二进制数据解压缩
s = b'\x00\x04\x00\x00hello, world\x00\x00\x00\x00\x00\x00\x00\x99\x0f\xdb\x0fI'
i, s, f = struct.unpack('I11s?f', s)
s = s.decode('utf-8').strip(b'\x00').decode('utf-8')
print(i, s, f) # 1024, 'hello, world', 3.14159

以上是 struct pack 的基本使用示例。需要注意的是,在 Python 中,需要将字符串使用 encode('utf-8') 进行编码,以便与二进制数据进行转换。另外,字符串在转换过程中需要占用与字符串长度相同的字节数,在不足时需要进行填充。