import struct
# Python struct 模块能够在 Python 值和 C 结构体之间进行转换,这些结构体用 Python 字符串 表示。
Python 结构体
- Python struct 模块可用于处理存储在文件、数据库或网络连接中的二进制数据等。
- 它使用格式字符串作为 C 结构体布局和 Python 值之间转换的紧凑描述。
Python Struct 函数
struct 模块中有五个重要的函数 – pack()
、unpack()
、calcsize()
、pack_into()
和 unpack_from()
。在所有这些函数中,我们必须提供要转换为二进制的数据的格式。一些常用的格式字符包括:
?: boolean
h: short
l: long
i: int
f: float
q: long long int
您可以在 这里 获取完整的格式字符列表。让我们逐一了解 struct 模块的函数。
Python struct.pack()
此函数将一组值打包成指定类型的字符串表示。参数必须与格式所需的值完全匹配。让我们快速看一下struct pack()的示例:
import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
var = struct.pack('iii', 10, 20, 30)
print(var)
当我们运行此脚本时,我们得到以下表示:请注意,输出中的 ‘b’ 代表二进制。
Python struct.unpack()
此函数将打包的值解包成指定格式的原始表示。即使只有一个元素,此函数也始终返回一个元组。让我们快速看一下struct unpack()函数的示例:
import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
print(struct.unpack('hhl', var))
当我们运行此脚本时,我们会得到我们原始的表示:显然,我们必须告诉Python解释器我们需要将值解包成的格式。
Python struct calcsize()
此函数计算并返回具有给定格式的结构的字符串表示形式的大小。大小以字节为单位计算。让我们快速查看一个示例代码片段:
import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
print("Size of String representation is {}.".format(struct.calcsize('hhl')))
当我们运行此脚本时,我们得到以下表示:
Python struct pack_into(), unpack_from()
这些函数允许我们将值打包到字符串缓冲区中,并从字符串缓冲区中解包。这些函数是在版本2.5中引入的。
import struct
# 导入ctypes以创建字符串缓冲区
import ctypes
# 如前面的示例所示
size = struct.calcsize('hhl')
print(size)
# 从ctypes创建缓冲区'buff'
buff = ctypes.create_string_buffer(siz)
# struct.pack_into()将数据打包到buff中,它不返回任何值
# struct.unpack_from()从buff中解包数据,返回一个值元组
print(struct.pack_into('hhl', buff, 0, 5, 10, 15))
print(struct.unpack_from('hhl', buff, 0))
当我们运行这个脚本时,我们得到以下表示: 这就是关于Python
struct
模块的简短介绍。
Source:
https://www.digitalocean.com/community/tutorials/python-struct-pack-unpack