Benutzer-Werkzeuge

Webseiten-Werkzeuge


edv:prg:c:tipp:big-endian_und_little-endian

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 0x123450x123460x123470x12348
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 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):
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 <stdio.h>
 
#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

edv/prg/c/tipp/big-endian_und_little-endian.txt · Zuletzt geändert: 2020/01/11 01:23 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki