Heim > Artikel > Backend-Entwicklung > Detaillierte Beschreibung der Verwendung von struct.pack() und struct.unpack() in Python
Die Struktur in Python wird hauptsächlich zum Verarbeiten von C-Strukturdaten verwendet. Beim Lesen wird sie zunächst in den Python-Typ String und dann in den strukturierten Typ von Python konvertiert als Tupel oder so ~. Im Allgemeinen stammen die Eingabekanäle aus Dateien oder Netzwerk-Binärströmen.
1.struct.pack() und struct.unpack()
Während des Konvertierungsprozesses wird eine Formatzeichenfolge(for mat strings), wird zur Angabe der Konvertierungsmethode und des Formats verwendet.
Lassen Sie uns über die Hauptmethoden sprechen:
1.1 struct.pack(fmt,v1,v2,...)
Geben Sie v1, v2 und andere Parameter ein. Der Wert ist In einer Schicht verpackt, und die Verpackungsmethode wird durch fmt angegeben. Die verpackten Parameter müssen strikt mit fmt übereinstimmen. Schließlich wird eine umschlossene Zeichenfolge zurückgegeben.
1.2 struct.unpack(fmt,string)
Wie der Name schon sagt, entpacken. Zum Beispiel wird pack verpackt und dann kann unpacked zum Auspacken verwendet werden. Gibt ein Tupel zurück, das durch Entpacken von Daten (Zeichenfolge) erhalten wurde. Auch wenn nur ein Datenwert vorhanden ist, werden diese in ein Tupel entpackt. Unter diesen muss len(string) gleich calcsize(fmt) sein, was eine calcsizeFunktion beinhaltet. struct.calcsize(fmt): Hiermit wird die Größe der im fmt-Format beschriebenen Struktur berechnet.
Die Formatzeichenfolge besteht aus einem oder mehreren Formatzeichen. Die Beschreibung dieser Formatzeichen finden Sie im Python-Handbuch wie folgt:
2 . Codebeispiel
import struct # native byteorder buffer = struct.pack("ihb", 1, 2, 3) print repr(buffer) print struct.unpack("ihb", buffer) # data from a sequence, network byteorder data = [1, 2, 3] buffer = struct.pack("!ihb", *data) print repr(buffer) print struct.unpack("!ihb", buffer) Output: '\x01\x00\x00\x00\x02\x00\x03' (1, 2, 3) '\x00\x00\x00\x01\x00\x02\x03' (1, 2, 3)
Erste Packparameter 1,2,3 Vor dem Packen gehören 1,2,3 offensichtlich zum IntegerDatentyp 🎜>. Nach dem Packen wird es zu einer C-strukturierten Binärzeichenfolge, und wenn es in den Python-Zeichenfolgentyp konvertiert wird, wird es als „x01x00x00x00x02x00x03“ angezeigt. Da es sich bei dieser Maschine um eine Little-Endian-Maschine („little- endian“) handelt, finden Sie hier Informationen zum Unterschied zwischen Big-Endian und Little-Endian. Daher werden die hohen Bits im unteren Adresssegment platziert. i stellt den int-Typ in der C-Struktur dar. Die Maschine belegt 4 Bits, und 1 wird als 01000000 dargestellt. h stellt den kurzen Typ in der C-Struktur dar und belegt daher 2 Bits Vorzeichenbehafteter char-Typ in der C-Struktur, der 1 Bit einnimmt, daher wird er als 03 dargestellt.
Beispielsweise ist in der zweiten Hälfte des Applets gerade das erste Bit in der verwendeten Formatzeichenfolge! Dies ist die Standardausrichtung im Big-Endian-Modus. Die Ausgabe lautet also „x00x00x00x01x00x02x03“, wobei das High-Bit selbst im High-Adress-Bit des Speichers platziert wird.
Das obige ist der detaillierte Inhalt vonDetaillierte Beschreibung der Verwendung von struct.pack() und struct.unpack() in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!