Endianness beschreibt, in welcher Reihenfolge die Bytes eines mehrbyte-Werts im Speicher abgelegt werden. Der Begriff kommt aus Gullivers Reisen (Jonathan Swift): Dort streiten sich die Lilliputaner, ob man ein Ei an der spitzen (little-end) oder am stumpfen Ende (big-end) aufschlägt.

Little-Endian und Big-Endian

Bei einer 32-Bit-Zahl wie 0x12345678 gilt:

  • Little-Endian: Das niederwertigste Byte steht an der kleinsten Speicheradresse — im Speicher liegt 78 56 34 12. Verwendet von x86-Prozessoren (Intel, AMD) sowie ARM und RISC-V im Standardmodus.
  • Big-Endian: Das höchstwertigste Byte steht zuerst — im Speicher liegt 12 34 56 78. Verwendet von Motorola-68000-Systemen, PowerPC und IBM-Großrechnern sowie als Netzwerk-Byte-Reihenfolge in TCP/IP-Protokollen (RFC 1700).

Viele Prozessoren (ARM, MIPS, PowerPC) sind bi-endian: Sie lassen sich per Konfiguration oder Instruktion umschalten. Die historische PDP-11 von DEC nutzte eine seltene Middle-Endian-Anordnung mit vertauschten 16-Bit-Wörtern.

Warum Endianness wichtig ist

Beim Austausch von Daten zwischen Systemen — Dateiformate wie PNG, JPEG oder ELF, vor allem aber Netzwerkprotokolle — muss die Byte-Reihenfolge fest vereinbart sein. Wer eine Little-Endian-Zahl über ein Big-Endian-Netzwerkprotokoll sendet, muss sie zuvor umdrehen; in C übernehmen dafür Funktionen wie htonl()/ntohl(), in Python übernimmt das struct.pack('<I', wert) (Little) bzw. struct.pack('>I', wert) (Big). Fehler zeigen sich als vertauschte Bytes im Hexdump und führen beim Debuggen von Protokollen und Binärformaten zu scheinbar sinnlosen Werten.

Zusammenhang zur Hardware

Die Endianness betrifft die Darstellung von Zahlen im Speicher und damit die Maschinensprache eines Systems. Der Instruktionssatz legt fest, wie der Prozessor Lade- und Speicherzugriffe interpretiert; der Compiler muss die Byte-Reihenfolge des Zielsystems kennen, wenn er Konstanten und Datenfelder im Speicher anordnet.