Python struct pack, unpack

De Python struct module is in staat om de conversies uit te voeren tussen Python waarden en C structs, die worden gerepresenteerd als Python Strings.

Python Structuur

  • De Python struct module kan worden gebruikt voor het verwerken van binaire gegevens die zijn opgeslagen in bestanden, databases of afkomstig zijn van netwerkverbindingen, enz.
  • Het maakt gebruik van format Strings als compacte beschrijvingen van de opmaak van de C structs en de beoogde conversie naar/van Python waarden.

Python Structuur Functies

Er zijn vijf belangrijke functies in de struct module – pack(), unpack(), calcsize(), pack_into() en unpack_from(). Bij al deze functies moeten we het formaat van de gegevens opgeven die geconverteerd moeten worden naar binaire code. Enkele populaire formaatkarakters zijn:

?: boolean
h: short
l: long
i: int
f: float
q: long long int

Je kunt de volledige lijst met formaatkarakters hier vinden. Laten we eens kijken naar de functies van de struct module, één voor één.

Python struct.pack()

Deze functie pakt een lijst van waarden in een string representatie van het gespecificeerde type. De argumenten moeten precies overeenkomen met de waarden die nodig zijn volgens het formaat. Laten we snel kijken naar een voorbeeld van struct pack():

import struct

var = struct.pack('hhl', 5, 10, 15)
print(var)
 
var = struct.pack('iii', 10, 20, 30)
print(var)

Wanneer we dit script uitvoeren, krijgen we de volgende representatie: Let op dat ‘b’ in de output staat voor binair.

Python struct.unpack()

Deze functie pakt de ingepakte waarde uit naar zijn oorspronkelijke representatie met het gespecificeerde formaat. Deze functie retourneert altijd een tuple, zelfs als er maar één element is. Laten we snel kijken naar een voorbeeld van de struct unpack() functie:

import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
print(struct.unpack('hhl', var))

Wanneer we dit script uitvoeren, krijgen we onze oorspronkelijke representatie terug: Het is duidelijk dat we aan de Python-interpreter moeten vertellen welk formaat we moeten gebruiken om de waarden uit te pakken.

Python struct calcsize()

Deze functie berekent en geeft de grootte terug van de stringrepresentatie van een struct met een opgegeven formaat. De grootte wordt berekend in termen van bytes. Laten we snel kijken naar een voorbeeldcodefragment:

import struct
 
var = struct.pack('hhl', 5, 10, 15)
print(var)
print("Size of String representation is {}.".format(struct.calcsize('hhl')))

Wanneer we dit script uitvoeren, krijgen we de volgende representatie:

Python struct pack_into(), unpack_from()

Deze functies stellen ons in staat om waarden in een stringbuffer te verpakken en uit te pakken uit een stringbuffer. Deze functies zijn geïntroduceerd in versie 2.5.

import struct
# ctypes is geïmporteerd om een stringbuffer te maken
import ctypes

# Zoals getoond in het vorige voorbeeld
size = struct.calcsize('hhl')
print(size)

# Buffer 'buff' wordt gemaakt vanuit ctypes
buff = ctypes.create_string_buffer(siz)

# struct.pack_into() verpakt gegevens in buff en geeft geen waarde terug
# struct.unpack_from() pakt gegevens uit buff en geeft een tuple van waarden terug
print(struct.pack_into('hhl', buff, 0, 5, 10, 15))
print(struct.unpack_from('hhl', buff, 0))

Wanneer we dit script uitvoeren, krijgen we de volgende representatie: Dat is alles voor een korte introductie van de Python struct module.

Source:
https://www.digitalocean.com/community/tutorials/python-struct-pack-unpack