In der Tat macht es in den allermeisten Fällen keinen Unterschied, ob ein Programm nun auf Little oder Big Endian läuft, da sich der Compiler darum kümmert, dass alles richtig läuft. Die einzigen Ausnahmen sind Binärdatenaustausch mit anderen Systemen oder der Zugriff auf Werte größer 1 Byte mit Hilfe von kleineren Werten.
In FPC gibt es (da dieser im Gegensatz zu Delphi durchaus Big Endian Systeme wie Power PC (mit Mac
OS X, Linux, Amiga, GameCube, Wii, etc.), M68k (Linux, Amiga, etc.), ARM Big Endian (Linux) und MIPS Big Endian (Linux) unterstützt) daher öfters mal Code wie diesen hier:
Delphi-Quellcode:
{$ifdef ENDIAN_LITTLE}
float64 = record
case byte of
1: (low,high : bits32);
// force the record to be aligned like a double
// else *_to_double will fail for cpus like sparc
// and avoid expensive unpacking/packing operations
2: (dummy : double);
end;
{$else}
float64 = record
case byte of
1: (high,low : bits32);
// force the record to be aligned like a double
// else *_to_double will fail for cpus like sparc
2: (dummy : double);
end;
{$endif}
Der Code stammt in diesem Fall aus der SoftFPU-
Unit, zeigt aber, dass beim Aufbrechen eines
Double
in High und Low Teil darauf geachtet werden muss, dass man die beiden Teile richtig herum hat. Ähnliches gilt, wenn man mit nem
PByte
über einen Speicherbereich von z. B.
LongInt
wandert.
Und nochmal: Delphi unterstützt nur arm-android in Little Endian.
Gruß,
Sven