bitlvl
DE

Endianness-Konverter

Geben Sie einen Wert und eine Breite ein. Sie erhalten beide Bytereihenfolgen, die Bytes, wie sie in den Speicher oder ein Paket geschrieben würden, und den Code zum Tauschen.

Breite
Eingabe ist
 
  

Die Ergebnisse und Meldungen dieses Tools werden auf Englisch angezeigt.

Was Endianness ist

Eine mehrbytige Zahl muss Byte für Byte gespeichert werden, und dafür gibt es zwei sinnvolle Reihenfolgen. Big-Endian legt das höchstwertige Byte an die niedrigste Adresse, so wie wir Zahlen schreiben: 0x12345678 wird zu 12 34 56 78. Little-Endian legt das niedrigstwertige Byte zuerst ab: 78 56 34 12. x86, x86-64 und (standardmäßig) ARM sind Little-Endian; Netzwerkprotokolle (IP, TCP, DNS), Java-Klassendateien, PNG und die meisten Großrechnerformate sind Big-Endian, weshalb „Network Byte Order“ Big-Endian bedeutet.

Wann es eine Rolle spielt

Innerhalb eines Programms auf einer Maschine nie: Die CPU erledigt es. Es zählt in dem Moment, in dem Bytes eine Grenze überschreiten: ein Struct in eine Datei schreiben, ein Paket lesen, über SPI mit einem Sensor sprechen, ein binäres Dateiformat abbilden oder einen Hex-Dump interpretieren. 78 56 34 12 in einem Dump von x86-Speicher zu lesen und für 0x78563412 zu halten, ist der klassische Fehler.

Die Funktionen

SpracheHost → Netzwerk (Big-Endian)Beliebiger Tausch
Chtonl, htons, htobe64__builtin_bswap32
Gobinary.BigEndian.PutUint32bits.ReverseBytes32
Pythonstruct.pack('>I', x)x.to_bytes(4, 'little')
Rustx.to_be_bytes()x.swap_bytes()
JavaScriptDataView.setUint32(o, x)DataView mit littleEndian=true

UTF-16 und die BOM

Text in UTF-16 hat dasselbe Problem, weshalb Dateien mit einer Byte-Order-Mark beginnen können: FE FF für Big-Endian, FF FE für Little-Endian. UTF-8 hat keine Bytereihenfolge und braucht keine BOM.

Fragen

Welche Endianness verwendet mein Computer?

Fast sicher Little-Endian: Alle x86- und x86-64-CPUs sind es, und ARM (Smartphones, Apple Silicon, Raspberry Pi) läuft in der Praxis Little-Endian. Big-Endian lebt in Netzwerkprotokollen und einigen Embedded- und Mainframe-Systemen weiter (s390x, ältere PowerPC, SPARC).

Warum ist das Netzwerk Big-Endian?

Historische Konvention aus dem frühen ARPANET und den IBM/Motorola-Maschinen, festgeschrieben in RFC 1700. Jedes Protokoll seither folgt ihr, deshalb hat jede Socket-API htons/htonl.

Beeinflusst Endianness die Bits innerhalb eines Bytes?

Nein. Ein Byte wird immer als Ganzes gelesen. Die Bitreihenfolge spielt nur bei seriellen Protokollen und manchen CRC-Algorithmen eine Rolle und ist eine eigene Frage.

Wie erkenne ich die Endianness zur Laufzeit?

Eine 1 in eine 32-Bit-Ganzzahl schreiben und das erste Byte ansehen: 1 bedeutet Little-Endian. In der Praxis sind explizite Konvertierungsfunktionen besser, damit der Code überall funktioniert.

Was ist Middle-Endian?

Die PDP-11 speicherte 32-Bit-Werte als zwei Little-Endian-16-Bit-Hälften in Big-Endian-Reihenfolge (34 12 78 56). Das ist ausgestorben, aber der Begriff wird noch für Datumsformate wie MM-DD-YYYY verwendet.