Поиск по сайту:

Упаковать структуру 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))