Python结构包,解包
时间:2020-02-23 14:43:33 来源:igfitidea点击:
Python struct模块能够执行Python值和C结构之间的转换,这些值以Python字符串表示。
Python结构
Python struct模块可用于处理存储在文件,数据库或者网络连接等中的二进制数据。
它使用格式字符串作为C结构布局的紧凑描述以及与Python值之间的预期转换。
Python结构函数
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()
此函数将值列表打包为指定类型的String表示形式。
参数必须与格式所需的值完全匹配。
让我们快速看一下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结构calcsize()
此函数以给定格式计算并返回struct的String表示形式的大小。
大小以字节为单位计算。
让我们快速看一下示例代码片段:
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 is imported to create a string buffer import ctypes # As shown in previous example size = struct.calcsize('hhl') print(size) # Buffer 'buff' is created from ctypes buff = ctypes.create_string_buffer(siz) # struct.pack_into() packs data into buff and it doesn't return any value # struct.unpack_from() unpacks data from buff, returns a tuple of values print(struct.pack_into('hhl', buff, 0, 5, 10, 15)) print(struct.unpack_from('hhl', buff, 0))