7.1. Struct 8212 Bytes als gepackte Binärdaten interpretieren Dieses Modul führt Konvertierungen zwischen Python-Werten und C-Strukturen durch, die als Python-Bytes-Objekte dargestellt werden. Dies kann verwendet werden, um binäre Daten, die in Dateien oder von Netzwerkverbindungen gespeichert sind, zu behandeln, unter anderen Quellen. Es verwendet Format-Strings als kompakte Beschreibungen des Layouts der C-Strukturen und der beabsichtigten Umsetzung zu / von Python-Werten. Standardmäßig enthält das Ergebnis des Packens einer gegebenen C-Struktur Pad-Bytes, um die korrekte Ausrichtung für die C-Typen, die ähnlich beteiligt sind, aufrechtzuerhalten, wird beim Auspacken die Ausrichtung berücksichtigt. Dieses Verhalten wird so gewählt, dass die Bytes einer gepackten Struktur exakt dem Layout im Speicher des entsprechenden C struct entsprechen. Um plattformunabhängige Datenformate zu behandeln oder implizite Pad-Bytes zu vermeiden, verwenden Sie statt der nativen Größe und Ausrichtung Standardgröße und Ausrichtung: Siehe Byte-Reihenfolge, Größe und Ausrichtung für Details. Mehrere struct-Funktionen (und Methoden von Struct) nehmen ein Buffer-Argument. Dies bezieht sich auf Objekte, die das Buffer-Protokoll implementieren und entweder einen lesbaren oder leseschreibbaren Puffer bereitstellen. Die am häufigsten verwendeten Typen sind Bytes und Bytearray. Aber viele andere Typen, die als Array von Bytes betrachtet werden können, implementieren das Pufferprotokoll, so dass sie ohne zusätzliches Kopieren aus einem Bytes-Objekt gelesen / gefüllt werden können. 7.1.1. Funktionen und Ausnahmen Das Modul definiert die folgenden Ausnahmen und Funktionen: exception struct. Error Ausnahmen bei verschiedenen Gelegenheiten Argument ist eine Zeichenfolge, die beschreibt, was falsch ist. Geben Sie ein Bytes-Objekt zurück, das die Werte v1 enthält. V2. Verpackt nach dem Formatstring fmt. Die Argumente müssen mit den im Format genau erforderlichen Werten übereinstimmen. Packen Sie die Werte v1. V2. Nach dem Formatstring fmt und schreiben die gepackten Bytes in den schreibbaren Pufferspeicher beginnend bei Positionsoffset. Beachten Sie, dass offset ein erforderliches Argument ist. Auspacken aus dem Pufferpuffer (vermutlich verpackt nach Packung (fmt.)) Entsprechend dem Formatstring fmt. Das Ergebnis ist ein Tupel, auch wenn es genau ein Element enthält. Die Größe von buffer8217s in Bytes muss mit der vom Format geforderten Größe übereinstimmen, wie dies durch calcsize () dargestellt wird. Auspacken ab Positionsoffset auspacken. Entsprechend dem Formatstring fmt. Das Ergebnis ist ein Tupel, auch wenn es genau ein Element enthält. Die Größe buffer8217s in Byte, minus Offset. Muss mindestens die Größe, die durch das Format, wie von calcsize (). Iteratives Auspacken aus dem Pufferspeicher nach dem Formatstring fmt. Diese Funktion gibt einen Iterator zurück, der gleich große Chunks aus dem Puffer liest, bis sein gesamter Inhalt verbraucht ist. Die Größe von buffer8217s in Byte muss ein Vielfaches der vom Format benötigten Größe sein, wie dies durch calcsize () dargestellt wird. Jede Iteration liefert ein Tupel, wie durch den Formatstring angegeben. Neu in Version 3.4. Geben Sie die Größe der Struktur (und damit des Bytes-Objekts, das von pack (fmt.) Erzeugt wird), die dem Formatstring fmt entspricht, zurück. 7.1.2. Format Strings Format Strings sind der Mechanismus verwendet, um das erwartete Layout beim Packen und Entpacken von Daten anzugeben. Sie werden aus Formatzeichen aufgebaut. Die die Art der verpackten / ausgepackten Daten angeben. Darüber hinaus gibt es Sonderzeichen für die Steuerung der Byte-Reihenfolge, Größe und Ausrichtung. 7.1.2.1. Byte-Reihenfolge, Größe und Ausrichtung Standardmäßig werden C-Typen im systemeigenen Format und in Byte-Reihenfolge der Maschine8217s dargestellt und durch das Überspringen von Pad-Bytes (nach den Regeln des C-Compilers) korrekt ausgerichtet. Alternativ kann das erste Zeichen der Formatzeichenfolge verwendet werden, um die Byte-Reihenfolge, die Größe und die Ausrichtung der gepackten Daten gemäß der folgenden Tabelle anzugeben: Wenn das erste Zeichen keines von diesen ist, wird 64 angenommen. Native Byte-Reihenfolge ist Big-Endian oder Little-Endian, abhängig von dem Host-System. Zum Beispiel sind Intel x86 und AMD64 (x86-64) Little-Endian Motorola 68000 und PowerPC G5 sind Big-Endian ARM und Intel Itanium Feature schaltbare Endianness (bi-endian). Verwenden Sie sys. byteorder, um die Endianness Ihres Systems zu überprüfen. Native Größe und Ausrichtung werden mit dem C Compiler8217s sizeof Ausdruck bestimmt. Dies ist immer mit der nativen Byte-Reihenfolge kombiniert. Die Standardgröße hängt nur von dem Formatzeichen ab, siehe Tabelle im Abschnitt Formatzeichen. Beachten Sie den Unterschied zwischen 64 und. Beide verwenden native Byte-Reihenfolge, aber die Größe und Ausrichtung der letzteren ist standardisiert. Das Formular ist für jene armen Seelen verfügbar, die behaupten, dass sie sich daran erinnern können, ob die Netzwerk-Byte-Reihenfolge big-endian oder little-endian ist. Es gibt keine Möglichkeit, nicht-native Byte-Reihenfolge (Kraft-Byte-Swapping) mit der entsprechenden Wahl von lt oder gt anzugeben. Padding wird nur automatisch zwischen aufeinanderfolgenden Strukturelementen hinzugefügt. Keine Polsterung wird am Anfang oder am Ende der codierten Struktur hinzugefügt. Bei der Verwendung nicht nativer Größe und Ausrichtung wird keine Polsterung hinzugefügt, z. B. Mit 8216lt8217, 8216gt8217, 82168217 und 82168217. Um das Ende einer Struktur an die Ausrichtungsanforderung eines bestimmten Typs anzupassen, beenden Sie das Format mit dem Code für diesen Typ mit einer Wiederholungsanzahl von Null. Siehe Beispiele. 7.1.2.2. Format-Zeichen Format-Zeichen haben die folgende Bedeutung, dass die Umwandlung zwischen C - und Python-Werten bei ihren Typen offensichtlich sein sollte. Die Spalte 8216Standard size8217 bezieht sich auf die Größe des gepackten Wertes in Bytes, wenn Standardgröße verwendet wird, dh wenn der Formatstring mit einem von lt beginnt. Gt; oder . Bei Verwendung der nativen Größe ist die Größe des gepackten Werts plattformabhängig. In Version 3.6 geändert: Unterstützung für das e-Format hinzugefügt. Der Umwandlungscode entspricht dem von C99 definierten Bool-Typ. Wenn dieser Typ nicht verfügbar ist, wird er mit einer Zeichenfolge simuliert. Im Standardmodus wird es immer durch ein Byte dargestellt. Die q - und q-Konvertierungscodes sind nur im systemeigenen Modus verfügbar, wenn der C-Compiler der Plattform C C lang lang unterstützt. Oder unter Windows, int64. Sie sind immer im Standardmodus verfügbar. Wenn Sie versuchen, eine Ganzzahl mit einem der Ganzzahl-Konvertierungscodes zu packen, wenn die Nicht-Integer eine Index () - Methode hat, wird diese Methode aufgerufen, um das Argument vor dem Packen in eine Ganzzahl zu konvertieren. Änderung in Version 3.2: Die Verwendung der index () - Methode für nicht-ganze Zahlen ist in 3.2 neu. Die n - und N-Umwandlungscodes sind nur für die native Größe (als Standard oder mit dem 64-Byte-Zeichen) ausgewählt. Für die Standardgröße können Sie verwenden, welches der anderen Integer-Formate für Ihre Anwendung passt. Für die f. D und e Umwandlungscodes verwendet, verwendet die gepackte Darstellung das IEEE 754 binary32-, binary64- oder binary16-Format (für f. D bzw. e) unabhängig von dem von der Plattform verwendeten Gleitkommaformat. Das P-Format-Zeichen steht nur für die native Byte-Reihenfolge zur Verfügung (wird als Standard - oder mit dem 64-Byte-Zeichen gewählt). Das Byte-Auftragszeichen entscheidet sich dafür, auf dem Host-System eine Little - oder Big-Endian-Reihenfolge zu verwenden. Das struct-Modul interpretiert dies nicht als native Sortierung, so dass das P-Format nicht verfügbar ist. Der IEEE 754 binary16 8220half precision8221 Typ wurde in der Revision 2008 des IEEE 754 Standard eingeführt. Es verfügt über ein Vorzeichenbit, einen 5-Bit-Exponenten und eine 11-Bit-Präzision (mit 10 Bits explizit gespeichert) und kann Zahlen zwischen ungefähr 6.1e-05 und 6.5e04 bei voller Genauigkeit darstellen. Dieser Typ wird von C-Compilern nicht weitgehend unterstützt: Auf einer typischen Maschine kann ein nicht signierter Short für die Speicherung verwendet werden, jedoch nicht für mathematische Operationen. Weitere Informationen finden Sie in der Wikipedia-Seite über das Fließkommaprogramm mit der Hälfte der Genauigkeit. Einem Formatzeichen kann eine ganzzahlige Wiederholungsanzahl vorausgehen. Beispielsweise bedeutet der Formatstring 4h genau dasselbe wie hhhh. Whitespace Zeichen zwischen Formaten werden ignoriert eine Anzahl und ihr Format darf keine Leerzeichen enthalten. Für das s-Formatzeichen wird die Zählung als die Länge der Bytes interpretiert, nicht als Wiederholungszählung wie für die anderen Formatzeichen zum Beispiel, 10s bedeutet eine einzelne 10-Byte-Zeichenfolge, während 10c 10 Zeichen bedeutet. Wenn eine Zahl nicht angegeben wird, wird sie standardmäßig auf 1 gesetzt. Beim Packen wird die Zeichenfolge abgeschnitten oder mit Null-Bytes gefüllt, um sie fit zu machen. Für das Entpacken hat das resultierende Bytes-Objekt immer genau die angegebene Anzahl von Bytes. Als Sonderfall bedeutet 0s eine einzelne, leere Zeichenfolge (0c bedeutet 0 Zeichen). Beim Packen eines Wertes x mit einem der ganzzahligen Formate, wenn x außerhalb des gültigen Bereichs für dieses Format liegt, wird struct. error angehoben. Geändert in Version 3.1: In 3.0 haben einige der Integer-Formate Out-of-Range-Werte und erhöhte DeprecationWarning statt struct. error. Das Zeichen p formatiert einen 8220Pascal string8221, was bedeutet, dass eine kurze Zeichenfolge mit variabler Länge in einer festen Anzahl von Bytes gespeichert wird. Gegeben durch die Zählung. Das erste gespeicherte Byte ist die Länge des Strings oder 255, je nachdem, welcher Wert kleiner ist. Die Bytes der Zeichenfolge folgen. Wenn der in pack () übergebene String zu lang ist (länger als der count minus 1), werden nur die führenden count-1 Byte des Strings gespeichert. Wenn der String kürzer als count-1 ist. Wird es mit Null-Bytes gefüllt, so dass genau Zähler-Bytes in allen verwendet werden. Beachten Sie, dass für entpack (). Das p-Formatzeichen verbraucht Zählbytes, aber der zurückgegebene String darf nie mehr als 255 Byte enthalten. Für das Formatzeichen ist der Rückgabewert entweder True oder False. Beim Packen wird der Wahrheitswert des Argumentobjekts verwendet. Entweder 0 oder 1 in der nativen oder Standard-bool-Darstellung wird gepackt, und jeder Wert ungleich Null wird beim Auspacken True sein. 7.1.2.3. Beispiele Alle Beispiele nehmen eine native Byte-Reihenfolge, Größe und Ausrichtung mit einer Big-Endian-Maschine an.7.3. Struct 8212 Interpretieren von Strings als gepackte binäre Daten Dieses Modul führt Konvertierungen zwischen Python-Werten und C-Strukturen durch, die als Python-Strings dargestellt werden. Dies kann verwendet werden, um binäre Daten, die in Dateien oder von Netzwerkverbindungen gespeichert sind, zu behandeln, unter anderen Quellen. Es verwendet Format-Strings als kompakte Beschreibungen des Layouts der C-Strukturen und der beabsichtigten Konvertierung zu / von Python-Werten. Standardmäßig enthält das Ergebnis des Packens einer gegebenen C-Struktur Pad-Bytes, um die korrekte Ausrichtung für die C-Typen, die ähnlich beteiligt sind, aufrechtzuerhalten, wird beim Auspacken die Ausrichtung berücksichtigt. Dieses Verhalten wird so gewählt, dass die Bytes einer gepackten Struktur exakt dem Layout im Speicher des entsprechenden C struct entsprechen. Um plattformunabhängige Datenformate zu behandeln oder implizite Pad-Bytes zu vermeiden, verwenden Sie statt der nativen Größe und Ausrichtung Standardgröße und Ausrichtung: Siehe Byte-Reihenfolge, Größe und Ausrichtung für Details. 7.3.1. Funktionen und Ausnahmen Das Modul definiert die folgenden Ausnahmen und Funktionen: exception struct. Error Ausnahmen bei verschiedenen Gelegenheiten Argument ist eine Zeichenfolge, die beschreibt, was falsch ist. Gibt einen String zurück, der die Werte v1, v2 enthält. Verpackt nach dem angegebenen Format. Die Argumente müssen mit den im Format genau erforderlichen Werten übereinstimmen. Packen Sie die Werte v1, v2. Nach dem angegebenen Format die gepackten Bytes in den beschreibbaren Puffer ein, beginnend beim Versatz. Beachten Sie, dass der Offset ein erforderliches Argument ist. Neu in Version 2.5. Entpacken Sie den String (vermutlich verpackt nach Packung (fmt.)) Entsprechend dem angegebenen Format. Das Ergebnis ist ein Tupel, auch wenn es genau ein Element enthält. Der String muss genau die Datenmenge enthalten, die das Format benötigt (len (string) muss gleich calcsize (fmt)) sein. Entpacken Sie den Puffer entsprechend dem angegebenen Format. Das Ergebnis ist ein Tupel, auch wenn es genau ein Element enthält. Der Puffer muss mindestens die Datenmenge enthalten, die vom Format benötigt wird (len (bufferoffset :) muss mindestens calcsize (fmt) sein). Neu in Version 2.5. Geben Sie die Größe der Struktur (und damit der Zeichenfolge) entsprechend dem angegebenen Format zurück. 7.3.2. Format Strings Format Strings sind der Mechanismus verwendet, um das erwartete Layout beim Packen und Entpacken von Daten anzugeben. Sie werden aus Formatzeichen aufgebaut. Die die Art der verpackten / ausgepackten Daten angeben. Darüber hinaus gibt es Sonderzeichen für die Steuerung der Byte-Reihenfolge, Größe und Ausrichtung. 7.3.2.1. Byte-Reihenfolge, Größe und Ausrichtung Standardmäßig werden C-Typen im systemeigenen Format und in Byte-Reihenfolge der Maschine8217s dargestellt und durch das Überspringen von Pad-Bytes (nach den Regeln des C-Compilers) korrekt ausgerichtet. Alternativ kann das erste Zeichen der Formatzeichenfolge verwendet werden, um die Byte-Reihenfolge, die Größe und die Ausrichtung der gepackten Daten gemäß der folgenden Tabelle anzugeben: Wenn das erste Zeichen keines von diesen ist, wird 64 angenommen. Native Byte-Reihenfolge ist Big-Endian oder Little-Endian, abhängig von dem Host-System. Zum Beispiel sind Intel x86 und AMD64 (x86-64) Little-Endian Motorola 68000 und PowerPC G5 sind Big-Endian ARM und Intel Itanium Feature schaltbare Endianness (bi-endian). Verwenden Sie sys. byteorder, um die Endianness Ihres Systems zu überprüfen. Native Größe und Ausrichtung werden mit dem C Compiler8217s sizeof Ausdruck bestimmt. Dies ist immer mit der nativen Byte-Reihenfolge kombiniert. Die Standardgröße hängt nur von dem Formatzeichen ab, siehe Tabelle im Abschnitt Formatzeichen. Beachten Sie den Unterschied zwischen 64 und. Beide verwenden native Byte-Reihenfolge, aber die Größe und Ausrichtung der letzteren ist standardisiert. Das Formular ist für jene armen Seelen verfügbar, die behaupten, dass sie sich daran erinnern können, ob die Netzwerk-Byte-Reihenfolge big-endian oder little-endian ist. Es gibt keine Möglichkeit, nicht-native Byte-Reihenfolge (Kraft-Byte-Swapping) mit der entsprechenden Wahl von lt oder gt anzugeben. Padding wird nur automatisch zwischen aufeinanderfolgenden Strukturelementen hinzugefügt. Keine Polsterung wird am Anfang oder Ende der codierten Struktur hinzugefügt. Bei der Verwendung nicht nativer Größe und Ausrichtung wird keine Polsterung hinzugefügt, z. B. Mit 8216lt8217, 8216gt8217, 82168217 und 82168217. Um das Ende einer Struktur an die Ausrichtungsanforderung eines bestimmten Typs anzupassen, beenden Sie das Format mit dem Code für diesen Typ mit einer Wiederholungsanzahl von Null. Siehe Beispiele. 7.3.2.2. Format-Zeichen Format-Zeichen haben die folgende Bedeutung, dass die Umwandlung zwischen C - und Python-Werten bei ihren Typen offensichtlich sein sollte. Die Spalte 8216Standard size8217 bezieht sich auf die Größe des gepackten Wertes in Bytes, wenn Standardgröße verwendet wird, dh wenn der Formatstring mit einem von lt beginnt. Gt; oder . Bei Verwendung der nativen Größe ist die Größe des gepackten Werts plattformabhängig. Der Umwandlungscode entspricht dem von C99 definierten Bool-Typ. Wenn dieser Typ nicht verfügbar ist, wird er mit einer Zeichenfolge simuliert. Im Standardmodus wird es immer durch ein Byte dargestellt. Neu in Version 2.6. Die q - und q-Konvertierungscodes sind nur im systemeigenen Modus verfügbar, wenn der C-Compiler der Plattform C C lang lang unterstützt. Oder unter Windows, int64. Sie sind immer im Standardmodus verfügbar. Neu in Version 2.2. Wenn Sie versuchen, eine Ganzzahl mit einem der Ganzzahl-Konvertierungscodes zu packen, wenn die Nicht-Integer eine Index () - Methode hat, wird diese Methode aufgerufen, um das Argument vor dem Packen in eine Ganzzahl zu konvertieren. Wenn keine index () - Methode vorhanden ist oder der Aufruf von index () den TypeError auslöst. Dann wird die int () - Methode versucht. Allerdings wird die Verwendung von int () veraltet und wird DeprecationWarning erhöhen. Änderung in Version 2.7: Die Verwendung der index () - Methode für nicht-ganze Zahlen ist in 2.7 neu. In Version 2.7 geändert: Vor der Version 2.7 würden nicht alle Integer-Konvertierungscodes die int () - Methode zum Konvertieren verwenden und DeprecationWarning wurde nur für float-Argumente angehoben. Für die f - und d-Wandlungscodes verwendet die gepackte Darstellung das IEEE 754 binary32 (für f) oder binary64 (für d) - Format, unabhängig von dem von der Plattform verwendeten Gleitkommaformat. Das P-Format-Zeichen steht nur für die native Byte-Reihenfolge zur Verfügung (wird als Standard - oder mit dem 64-Byte-Zeichen gewählt). Das Byte-Auftragszeichen entscheidet sich dafür, auf dem Host-System eine Little - oder Big-Endian-Reihenfolge zu verwenden. Das struct-Modul interpretiert dies nicht als native Sortierung, so dass das P-Format nicht verfügbar ist. Einem Formatzeichen kann eine ganzzahlige Wiederholungsanzahl vorausgehen. Beispielsweise bedeutet der Formatstring 4h genau dasselbe wie hhhh. Whitespace Zeichen zwischen Formaten werden ignoriert eine Anzahl und ihr Format darf keine Leerzeichen enthalten. Für das s-Formatzeichen wird der Zählwert als die Größe der Zeichenfolge interpretiert, nicht als Wiederholungszählung wie für die anderen Formatzeichen, z. B. 10s bedeutet eine einzelne 10-Byte-Zeichenfolge, während 10c 10 Zeichen bedeutet. Wenn eine Zahl nicht angegeben wird, wird sie standardmäßig auf 1 gesetzt. Beim Packen wird die Zeichenfolge abgeschnitten oder mit Null-Bytes gefüllt, um sie fit zu machen. Für das Entpacken hat der resultierende String immer genau die angegebene Anzahl von Bytes. Als Sonderfall bedeutet 0s eine einzelne, leere Zeichenfolge (0c bedeutet 0 Zeichen). Das Format p formatiert eine 8220Pascal string8221, dh eine kurze Zeichenfolge mit variabler Länge, die in einer festen Anzahl von Bytes gespeichert ist. Gegeben durch die Zählung. Das erste gespeicherte Byte ist die Länge des Strings oder 255, je nachdem, welcher Wert kleiner ist. Die Bytes der Zeichenfolge folgen. Wenn der in pack () übergebene String zu lang ist (länger als der count minus 1), werden nur die führenden count-1 Byte des Strings gespeichert. Wenn der String kürzer als count-1 ist. Wird es mit Null-Bytes gefüllt, so dass genau Zähler-Bytes in allen verwendet werden. Beachten Sie, dass für entpack (). Das p-Formatzeichen verbraucht Zählbytes, aber der zurückgegebene String darf nie mehr als 255 Zeichen enthalten. Für das P-Formatzeichen ist der Rückgabewert ein Python-Integer oder Long-Integer, abhängig von der Größe, die benötigt wird, um einen Zeiger zu halten, wenn er in einen Integer-Typ umgewandelt wurde. Ein NULL-Zeiger wird immer als Python-Integer 0 zurückgegeben. Beim Packen von Zeigergröße-Werten können Python-Integer - oder Long-Integer-Objekte verwendet werden. Beispielsweise verwenden die Alpha - und Merced-Prozessoren 64-Bit-Zeigerwerte, was bedeutet, dass eine lange Python-Ganzzahl verwendet wird, um den Zeiger zu halten, andere Plattformen 32-Bit-Zeiger verwenden und einen Python-Integer verwenden. Für das Formatzeichen ist der Rückgabewert entweder True oder False. Beim Packen wird der Wahrheitswert des Argumentobjekts verwendet. Entweder 0 oder 1 in der nativen oder Standard-bool-Darstellung wird gepackt, und jeder Wert ungleich Null wird beim Auspacken True sein. 7.3.2.3. Beispiele Alle Beispiele nehmen eine native Byte-Reihenfolge, Größe und Ausrichtung mit einer Big-Endian-Maschine an.
No comments:
Post a Comment