Erstmal, vorsicht, das kommt natürlich immer auf deine Endianess an. x86 benutzt Little Endian, also endet in der kleinsten byte addresse. Das heißt der Aufbau eines Ints 0xAABBCCDD würde im speicher als [DD][CC][BB][AA] dargestellt werden (das kleinstwertigste byte zu erst, und das byte mit addresse 0 ([AA]) am schluss). Auf einem Big Endian System würde es aber [AA][BB][CC][DD] gespeichert werden.
Bei x86 ists noch einfach, da da die Spezifikation besagt das es little endian ist. Bei ARM hat man aber nicht das glück, da lässt die Spezifikation es offen. Das heißt z.B. ist der Raspberry Pi Prozessor, sowie die Qualcomm prozessoren die in Android geräten drin sind alle Little endian, das muss aber nicht für jeden ARM prozessor gelten.
Dafür bietet der FPC aber auch ein Macro:
Code: Alles auswählen
var convert: record
case Boolean of
{$IFDEF ENDIAN_LITTLE}
True: (HiByte, LoByte: Byte);
{$ELSE}
True: (LoByte, HiByte: Byte);
{$ENDIF}
False: (Value: Word);
end;
Ansonsten wurde hier schon alles erwähnt, absolute keyword, pointer magic und variante records. Mein liebstes sind Variante records, da ich da die Endianess am einfachsten beachten kann