当我们需要将多个变量打包成一个元组时,可以使用python中的pack()函数。该函数可以将变量组合成一个元组,可以方便地将该元组作为参数传递到函数中使用,也可以从函数中获取一个打包的返回值。
pack()方法的语法如下:
struct.pack(fmt, v1, v2, ...)
其中,第一个参数fmt是一个字符串,指明了打包的格式。后面的参数v1, v2, …是需要被打包的变量。
下面是几个常见的格式选项,用于指定格式字符串fmt:
- “>”: 大端模式(从高位到低位,比如人类数字也是大端模式)
- “<“: 小端模式(从低位到高位,比如机器存储方式)
- “b”: 有符号字节(byte)
- “B”: 无符号字节(byte)
- “h”: 有符号短整型(2字节)
- “H”: 无符号短整型(2字节)
- “i”: 有符号标准整型(4字节)
- “I”: 无符号标准整型(4字节)
- “f”: 单精度浮点数(4字节)
- “d”: 双精度浮点数(8字节)
- “s”: 字符串,具体长度在fmt中指定。
下面是两个不同的示例,用于演示pack()函数的使用:
import struct
# 例一:打包为字节流(bytes)
fmt = ">hHi" # 大端模式、2字节的有符号短整型、4字节的有符号整型
packed_data = struct.pack(fmt, 1, 2, 65536) # 打包数据
print(packed_data) # b'\x00\x01\x00\x02\x00\x00\x01\x00'
import struct
# 例二:结合字符串传递数据
fmt = "3s3sif"
packed_data = struct.pack(fmt, "Hello".encode(), "World".encode(), 3.14, 42)
print(packed_data) # b'HelloWorld\x0fI\xdb!'
在使用该函数时,需要注意所选定的格式字符串fmt和传递的变量类型要一一对应。否则就会出现数据显示不正确的问题。