====== Big-Endian und Little-Endian ====== Eine umfangreiche Beschreibung zum Thema findet man auf der Seite von Jürgen Wolf:\\ [[http://pronix.linuxdelta.de/C/standard_C/c_programmierung_19_3.shtml]] Hier ist eine kleine Zitat aus dem durch den o.g. Link referenzierten Text: **Little-Endian** und **Big-Endian** unterscheiden sich durch die Anordnung des **most significant byte** und des **least significant byte**. Bei einer Word-Größe der CPU von vier Bytes wird das rechte Ende als least significant byte und das linke Ende als most significant byte bezeichnet. Das least significant byte stellt dabei die niedrigeren Werte und das most significant byte die größeren Werte in einem Word dar. Als Beispiel dient jetzt folgende Hex-Zahl: 22CCDDEE Auf den unterschiedlichen Systemen wird diese Hex-Zahl im Speicher folgendermaßen abgelegt: ^Adresse ^0x12345^0x12346^0x12347^0x12348^ |Big-Endian |22 |CC |DD |EE | |Little-Endian |EE |DD |CC |22 | Wie man herausfindet, auf was für einem System das Programm ausgeführt wird, wird mit einem [[http://pronix.linuxdelta.de/C/standard_C/c_programmierung_19_3.shtml|Beispiel]] (§19.17.3) unter dem o.g. Link erklärt. Zu den **Little-Endian**-Systemen gehören z.B.: * Intel CPUs (x86, x64 bzw. x86_x64) * DEC Alpha * VAX Und einige **Big-Endian**-Systeme: * Motorola MC68000 (Amiga, Atari) * SPARC CPUs (SUN) * IBM PowerPC Quelle: [[http://pronix.linuxdelta.de/C/standard_C/c_programmierung_19_3.shtml]] (von Jürgen Wolf) Byte- und Bit-Order, CPU IA-32 (little endian):\\ {{:edv:prg:c:tipp:byte-_und_bit-order.cpu_ia-32_little_endian_.png|Byte- und Bit-Order, CPU IA-32 (little endian)}} Quelle: [[http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-2a-manual.html]] Hier ist ein Beispiel, wie man prüft welches Endianess das System hat (der Code muss auf dem Zielsystem übersetzt werden): #include #define is_bigendian() ((*(char*)&i) == 0) int main (void) { const int i = 1; printf("Endianess = %s-Endian\n", is_bigendian() ? "BIG" : "LITTLE"); return 0; } // main() ---- Stand: 06.09.2016 EOF