Byte-Reihenfolge
Auf Computern gibt es mehrere Möglichkeiten, wie Zahlenwerte, die aus mehreren Bytes bestehen, im Speicher abgelegt sind. Die beiden wichtigsten sind Big Endian und Little Endian.
Hex-Darstellung | 0xA4B3C2D1 | |||
---|---|---|---|---|
Speicheroffset | 0 | 1 | 2 | 3 |
Little Endian | D1 | C2 | B3 | A4 |
Big Endian | A4 | B3 | C2 | D1 |
Nehmen wir im Folgenden als Beispiel den 32-Bit-Integer-Wert mit der hexadezimalen Darstellung 0xA4B3C2D1.
Wenn wir die 4 Bytes in der Reihenfolge D1 C2 B3 A4, also das niederwertigste Byte an der niedrigsten Speicheradresse ablegen, spricht man von Little Endian. Eingeführt wurde diese Byte-Reihenfolge beispielsweise mit dem 6502, der NEC-V800-Reihe oder den Intel-x86-Prozessoren.
Die Speicherung in der Reihenfolge A4 B3 C2 D1, also das höchstwertige Byte an der niedrigsten Speicheradresse, wird als Big Endian bezeichnet. Verwendet wird diese Byte-Reihenfolge beispielsweise bei der Motorola-68000er-Familie, dem PowerPC oder den Prozessoren der z/Series. Auch die gewöhnliche Darstellung von Zahlen ist damit – im Sinne der Leserichtung von links nach rechts – Big Endian, wenn man so will.
Einige ältere Systeme speicherten die Daten in der Reihenfolge C2 D1 A4 B3 oder auch B3 A4 D1 C2, beides wird als Middle Endian bezeichnet.
Um einen fehlerfreien Datenaustausch im Internet zu ermöglichen, ist bei Netzwerkprotokollen normalerweise immer die Byte-Reihenfolge festgeschrieben als Network Byte Order, die im Falle von TCP/IP im Big-Endian-Format definiert ist. Arbeitet das System nicht mit dieser Byte-Reihenfolge, muss dies im Netzwerktreiber entsprechend umgesetzt werden.
Scherzhaft wird das Problem verschiedener Endianess unterschiedlicher Architekturen auch oft NUXI-Problem bezeichnet: Wenn das Word UNIX in zwei 2-Byte-Worten gespeichert wird, liegt es in einem Big-Endian-System als „UNIX” im Speicher, in einem Little-Endian-System dagegen wegen der Vertauschung der Bytes in jedem Wort als „NUXI”.
Vorteile
In der Little-Endian-Form können die Bytes für einen Befehl nacheinander abgerufen werden; ob 2, 3 oder mehr Bytes gelesen werden müssen, sie werden in der gleichen Reihenfolge abgerufen: 1, 2, 3, 4. Aufgrund der 1:1-Beziehung zwischen Adresse und Offset sind mathematische Routinen für Berechnungen einfach zu schreiben.
In der Big-Endian-Form kann z.B. recht einfach geprüft werden, ob eine Zahl positiv oder negativ ist: nur das erste (oberste) Byte ist zu lesen. Hier steht im höchsten Bit das Vorzeichen. Die restlichen Bytes können übersprungen werden, egal, ob die Zahl mit 1, 2 oder 4 Byte Länge definiert ist. Die Zahlen liegen in der Reihenfolge im Speicher, in der sie auch ausgedruckt werden, so dass Umrechenroutinen für Binär zu Dezimal einfach zu schreiben sind.
Verwendung
Mainframe-Systeme (z.B. IBM Mainframe) und Motorola-Prozessoren (z.B. im Macintosh) verwenden Big-Endian. Heutige PC-Systeme verwenden in der Regel Little-Endian.
Etymologie
Die kuriose Bezeichnung lehnt an den satirischen Roman Gullivers Reisen von Jonathan Swift an, in dem der Streit darüber, ob ein Ei am spitzen oder am dicken Ende aufzuschlagen sei, die Bewohner von Liliput in zwei verfeindete Lager spaltet – die „Little-Endians” und die „Big-Endians”, in der deutschen Übersetzung des Buches „Dickender” und „Spitzender”.