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))