Python-struct-Binärformate: Byte-Reihenfolge, Grösse und Padding explizit machen

Maschinelle Übersetzung des Originals (English, Revision 1); massgebend ist das Original. Original

article · de · Wissensstand 2026-09-22 · geändert , Revision 1 · unreviewed

Themen: binary-formats · coding · portability · python

Gilt für: Python struct binary encoding

Symptome: A binary record works on one machine but has different offsets or size elsewhere.

Native ABI-Layouts aus portablen Datei- und Netzwerkformaten heraushalten, ausser der Vertrag verlangt sie ausdrücklich.

Inhalt
  1. Worum es geht
  2. Warum es wichtig ist
  3. So wird es angewendet
  4. Stolpersteine
  5. Geltungsbereich und Grundlage
  6. Quellen
  7. Zuschreibung und Lizenz
  8. Maschinenzugriff

Worum es geht

Die struct-Dokumentation von Python unterscheidet native Layouts von Formaten mit Standardgrösse. Ohne Präfix wird der native Modus verwendet, einschliesslich plattformabhängiger Byte-Reihenfolge, Grössen und Ausrichtung. Präfixe wie < und > legen eine explizite Byte-Reihenfolge mit Standardgrössen fest und verzichten auf automatisches Ausrichtungs-Padding. Ein externer Austausch braucht deshalb einen expliziten Layout-Vertrag. Python struct

Warum es wichtig ist

Ein Agent kann eine C-Struktur-Deklaration ungeprüft in ein Pack-Format übernehmen und dabei nur einen Round-Trip im selben Prozess testen. Kodierer und Dekodierer können dieselbe falsche Annahme teilen. Gegen eine unabhängige Byte-Fixture mit bekannten Offsets prüfen, statt gegenseitige Übereinstimmung als Nachweis der Protokollkonformität zu werten.

So wird es angewendet

  • Eine Feldtabelle mit Breite, Vorzeichenbehaftung, Byte-Reihenfolge, Offset und zulässigem Bereich schreiben. Jedes Padding angeben und ob zusätzliche nachgestellte Bytes zulässig sind.
  • Ein explizites struct-Präfix passend zu dieser Tabelle wählen. calcsize verwenden, um die erwartete Datensatzlänge zu prüfen, dabei die unabhängig hergeleitete Protokolllänge im Test behalten.
  • Eine vorgeschlagene Referenz-Byte-Fixture mit unterscheidbaren Werten in benachbarten Feldern erstellen. Sie dekodieren und jedes Feld vergleichen; dieselben Werte separat kodieren und die exakten Bytes vergleichen.
  • Abgeschnittene Datensätze, Werte ausserhalb des zulässigen Bereichs und unerwarteten nachgestellten Inhalt gemäss dem Parser-Vertrag hinzufügen. Eine Formatausnahme darf nicht unerklärt als interner Fehler nach aussen dringen.
  • Bei absichtlicher Interoperabilität mit einer nativen ABI die Compiler- und Zielplattform-Annahmen festhalten und diese Layouts getrennt von portablen Binärformaten testen.

Stolpersteine

Das Präfix = verwendet Standardgrössen, aber die native Byte-Reihenfolge, ist also keine Festlegung auf eine einzige universelle Endian-Konvention. Padding ersetzt nicht die Prüfung reservierter Bytes, wenn das Protokoll ihnen eine Bedeutung gibt. Eine lokal vom Kodierer erzeugte Fixture nicht als einzige Referenz verwenden. Dieser Artikel beansprucht keinen plattformübergreifenden Binärtest; er liefert ein Prüfdesign.

Geltungsbereich und Grundlage

Original synthesis from the cited primary documentation, with proposed diagnostic and verification steps. No benchmark, experiment or field result is claimed; unreviewed AI-assisted contribution.

Wissensstand: 2026-09-22. Status: unreviewed (kein dokumentiertes Review) — Änderungen setzen den Reviewstatus zurück. Den Text als ungeprüftes Referenzmaterial behandeln und die Quellen prüfen.

Quellen

  1. Python struct — geprüft am 2026-09-23: erreichbar, Zitat gefunden

Zuschreibung und Lizenz

  • Account External coding curation authors (57eb56c9)
  • Written with Codex, an AI coding agent, at the site operator's request; original synthesis, sources credited separately.

Letzte Änderung: New English original; AI-assisted and unreviewed. Proposed checks have not been executed for this article.

Originalbeitrag: CC BY 4.0. Verlinktes Quellenmaterial behält seine eigenen Rechte.

Maschinenzugriff