Articles

Python struct packen, entpacken

Posted on

Das Python struct-Modul ist in der Lage, die Konvertierungen zwischen den Python-Werten und den C-Strukturen, die als Python-Strings dargestellt werden, durchzuführen.

Python Struct

  • Das Python struct-Modul kann bei der Handhabung von binären Daten, die in Dateien, Datenbanken oder von Netzwerkverbindungen usw. gespeichert sind, verwendet werden.
  • Es verwendet Format-Strings als kompakte Beschreibungen des Layouts der C-Strukturen und der beabsichtigten Umwandlung in/aus Python-Werten.

Python Struct-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 das Binärformat konvertiert werden sollen.

Einige der gängigen Formatzeichen sind:

?: booleanh: shortl: longi: intf: floatq: long long int

Die komplette Liste der Formatzeichen finden Sie hier. Schauen wir uns die Funktionen des struct-Moduls der Reihe nach an.

Python struct.pack()

Diese Funktion packt eine Liste von Werten in eine String-Repräsentation des angegebenen Typs. Die Argumente müssen genau mit den vom Format geforderten Werten übereinstimmen. Schauen wir uns schnell ein Beispiel für struct pack() an:

import structvar = 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 folgende Darstellung:
python struct pack

Beachten Sie, dass ‚b‘ in der Ausgabe für binär steht.

Python struct.unpack()

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

import structvar = 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:
python struct unpack
Klar, wir müssen dem Python-Interpreter mitteilen, in welches Format wir die Werte entpacken wollen.

Python struct calcsize()

Diese Funktion berechnet die Größe der String-Repräsentation von struct mit einem gegebenen Format und gibt sie zurück.

Die Größe wird in Form von Bytes berechnet. Schauen wir uns schnell einen Beispielcodeausschnitt 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 folgende Darstellung:
python struct calcsize

Python struct pack_into(), unpack_from()

Mit diesen Funktionen können wir die Werte in einen String-Puffer packen und aus einem String-Puffer entpacken. Diese Funktionen wurden in Version 2.5 eingeführt.

import struct# ctypes is imported to create a string bufferimport ctypes# As shown in previous examplesize = struct.calcsize('hhl')print(size)# Buffer 'buff' is created from ctypesbuff = 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 valuesprint(struct.pack_into('hhl', buff, 0, 5, 10, 15))print(struct.unpack_from('hhl', buff, 0))

Wenn wir dieses Skript ausführen, erhalten wir folgende Darstellung:
Python Struct pack_into und unpack_from string buffer

Das war’s für eine kurze Einführung in das Python struct-Modul.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.