Python struct pack, unpack

Die Python-Struktur Module ist in der Lage, die Konvertierungen zwischen den Python-Werten und C-Strukturen durchzuführen, die als Python-Strings dargestellt werden.

Python-Struktur

  • Das Python-Struct-Modul kann zum Umgang mit binären Daten verwendet werden, die in Dateien, Datenbanken oder von Netzwerkverbindungen usw. gespeichert sind.
  • Es verwendet Formatzeichenfolgen als kompakte Beschreibungen der Anordnung der C-Strukturen und der beabsichtigten Konvertierung zu/von Python-Werten.

Python-Struktur-Funktionen

Es gibt fünf wichtige Funktionen im Struct-Modul – pack(), unpack(), calcsize(), pack_into() und unpack_from(). In all diesen Funktionen müssen wir das Format der Daten angeben, die in binäre Daten konvertiert werden sollen. Einige der beliebten Formatzeichen sind:

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

Sie können die vollständige Liste der Formatzeichen hier erhalten. Lassen Sie uns nun die Funktionen des Strukturmoduls einzeln betrachten.

Python struct.pack()

Diese Funktion packt eine Liste von Werten in eine Zeichenfolgenrepräsentation des angegebenen Typs. Die Argumente müssen genau den Werten entsprechen, die vom Format benötigt werden. Schauen wir uns schnell ein Beispiel für struct pack() an:

import struct

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

Wenn wir dieses Skript ausführen, erhalten wir die folgende Darstellung: Beachten Sie, dass ‚b‘ in der Ausgabe für binär steht.

Python struct.unpack()

Diese Funktion entpackt den gepackten Wert in seine ursprüngliche Darstellung mit dem angegebenen Format. Diese Funktion gibt immer ein Tupel zurück, auch wenn es nur ein Element gibt. Schauen wir uns schnell ein Beispiel für die Funktion struct unpack() an:

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

Wenn wir dieses Skript ausführen, erhalten wir unsere ursprüngliche Darstellung zurück: Offensichtlich müssen wir dem Python-Interpreter das Format mitteilen, in das wir die Werte entpacken möchten.

Python struct calcsize()

Diese Funktion berechnet und gibt die Größe der String-Repräsentation einer Struktur mit einem gegebenen Format zurück. Die Größe wird in Bytes berechnet. Schauen wir uns schnell ein Beispielcode-Schnipsel an:

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

Wenn wir dieses Skript ausführen, erhalten wir die folgende Darstellung:

Python struct pack_into(), unpack_from()

Diese Funktionen ermöglichen es uns, die Werte in einen Zeichenpuffer zu packen und aus einem Zeichenpuffer zu entpacken. Diese Funktionen wurden in Version 2.5 eingeführt.

import struct
# ctypes wird importiert, um einen Zeichenpuffer zu erstellen
import ctypes

# Wie im vorherigen Beispiel gezeigt
size = struct.calcsize('hhl')
print(size)

# Puffer 'buff' wird aus ctypes erstellt
buff = ctypes.create_string_buffer(siz)

# struct.pack_into() packt Daten in buff und gibt keinen Wert zurück
# struct.unpack_from() entpackt Daten aus buff und gibt ein Tupel von Werten zurück
print(struct.pack_into('hhl', buff, 0, 5, 10, 15))
print(struct.unpack_from('hhl', buff, 0))

Wenn wir dieses Skript ausführen, erhalten wir die folgende Darstellung: Das ist alles für eine kurze Einführung in das Python struct Modul.

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