Big vs. Little Endian
Endian-Ness gibt an, wie Bytes in einem Speicherwort angeordnet sind. Die beiden gängigen Arten sind Big Endian und Little Endian. Diese Konzepte sind wichtig für das Verständnis, wie Daten in verschiedenen Systemen und Architekturen gespeichert und übertragen werden.
Little Endian
Definition
Bei Little Endian wird das „kleinste“ Byte des Speichers zuerst gespeichert, d.h., das niederwertigste Byte (Least Significant Byte - LSB) kommt an die niedrigste Speicheradresse.
Verwendung
Little Endian wird von den meisten gängigen Architekturen verwendet, einschließlich x86 (Intel) und ARM (unter Raspian/Linux und vielen anderen Betriebssystemen).
Beispiel (Little Endian)
Angenommen, wir haben die 32-Bit-Hexadezimalzahl 0x12345678.
| Adresse | Wert |
|---|---|
| 0x0000 | 78 |
| 0x0001 | 56 |
| 0x0002 | 34 |
| 0x0003 | 12 |
Hier wird das LSB 78 an der niedrigsten Adresse 0x0000 gespeichert.
Big Endian
Definition
Bei Big Endian wird das „größte“ Byte des Speichers zuerst gespeichert, d.h., das höchstwertigste Byte (Most Significant Byte - MSB) kommt an die niedrigste Speicheradresse.
Verwendung
Big Endian ist weniger verbreitet, wird aber zum Beispiel von einigen Netzwerkanwendungen und älteren Mainframes verwendet.
Beispiel (Big Endian)
Angenommen, wir haben dieselbe 32-Bit-Hexadezimalzahl 0x12345678.
| Adresse | Wert |
|---|---|
| 0x0000 | 12 |
| 0x0001 | 34 |
| 0x0002 | 56 |
| 0x0003 | 78 |
Hier wird das MSB 12 an der niedrigsten Adresse 0x0000 gespeichert.
Vergleich und Relevanz
Lesbarkeit/Wahrnehmung
Big Endian wird oft als "natürlicher" wahrgenommen, weil die Reihenfolge der Bytes der Reihenfolge der signifikanten Stellen entspricht.
Kompatibilität
Little Endian kann in manchen Anwendungen von Vorteil sein, z.B., wenn man mit 8-, 16-, oder 32-Bit-Werten arbeitet. Die Little Endian-Anordnung macht es einfacher, LSB-Operationen durchzuführen.
Anwendung unter Linux auf ARM
Linux basierende Betriebssysteme, die auf ARM-Prozessoren laufen, verwenden standardmäßig Little Endian.
Beispielcode in C zur Überprüfung der Endianess
#include <stdio.h>
int main() {
unsigned int x = 0x12345678;
char *c = (char*)&x;
if (*c == 0x78) {
printf("Little Endian\n");
} else {
printf("Big Endian\n");
}
return 0;
}
Praktische Überlegungen
- Datenübertragung: Netzwerke (TCP/IP) nutzen Big Endian (Netzwerk-Byte-Reihenfolge). Systeme müssen sicherstellen, dass Daten korrekt umgewandelt werden, wenn sie zwischen Systemen mit unterschiedlicher Endianess gesendet werden.
- Portabilität: Programme, die mit binären Daten arbeiten, müssen Endianess berücksichtigen, besonders wenn sie zwischen Systemen mit unterschiedlicher Endianess portiert werden.
Zusammenfassung
Endianess beschreibt die Reihenfolge der Byte-Speicherung von Zahlen im Speicher. Little Endian speichert die Bytes in aufsteigender Reihenfolge ihrer Signifikanz (LSB zuerst), während Big Endian die Bytes in absteigender Reihenfolge ihrer Signifikanz speichert (MSB zuerst). Linux-Systeme auf ARM-Prozessoren verwendet Little Endian. Verständnis der Endianess ist besonders wichtig bei der Netzwerkkommunikation, plattformübergreifenden Entwicklung und beim Arbeiten mit binären Daten.