Упаковать структуру Python, распаковать
Структура Python Строки Python.
Структура Python
- Модуль структуры Python можно использовать для обработки двоичных данных, хранящихся в файлах, базе данных или полученных из сетевых подключений и т. д.
- Он использует строки формата в качестве компактного описания макета структур C и предполагаемого преобразования в/из значений Python.
Структурные функции Python
В модуле struct есть пять важных функций: pack()
, unpack()
, calcsize()
, pack_into()
и unpack_from()
. Во всех этих функциях мы должны указать формат данных для преобразования в двоичный формат. Некоторые из популярных символов формата:
?: boolean
h: short
l: long
i: int
f: float
q: long long int
Вы можете получить полный список символов формата здесь. Давайте начнем рассматривать функции структурного модуля одну за другой.
Структура Python.pack()
Эта функция упаковывает список значений в строковое представление указанного типа. Аргументы должны точно соответствовать значениям, требуемым форматом. Давайте быстро рассмотрим пример struct pack():
import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
var = struct.pack('iii', 10, 20, 30)
print(var)
Структура Python.распаковать()
Эта функция распаковывает упакованное значение в исходное представление в указанном формате. Эта функция всегда возвращает кортеж, даже если есть только один элемент. Давайте быстро рассмотрим пример функции struct unpack():
import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
print(struct.unpack('hhl', var))
Структура Python calcsize()
Эта функция вычисляет и возвращает размер строкового представления структуры в заданном формате. Размер рассчитывается в байтах. Давайте быстро рассмотрим пример фрагмента кода:
import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
print("Size of String representation is {}.".format(struct.calcsize('hhl')))
Структура Python 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))