Einzelnen Beitrag anzeigen

gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#10

AW: Byte Array to UInt64

  Alt 6. Apr 2011, 08:20
Ich vermute mal, es liegt daran, daß der Compiler kein 64-Bit-Register zur Verfügung hat, in dem er die Shift-Operation durchführen kann.

Laut Hilfe arbeiten die logischen Operatoren auch lediglich auf (32-Bit) Integer.
Die fehlenden 64-Bit-Register sind kein Problem, die Hilfe gibt auch schon den Hinweis. Man muß halt eigentlich nur dafür sorgen, daß Shifts um mehr als 32 Positionen ohne Fehler möglich sind. Das geht, wenn man int64/unit64 shiftet. Also ist ein Typecast erforderlich:
Delphi-Quellcode:
function TUInt64Rec2.GetUInt64 : UInt64;
begin
  Result :=
    (uint64(_Byte[0]) Shl 56) or
    (uint64(_Byte[1]) Shl 48) or
    (uint64(_Byte[2]) Shl 40) or
    (uint64(_Byte[3]) Shl 32) or
    (_Byte[4] Shl 24) or
    (_Byte[5] Shl 16) or
    (_Byte[6] Shl 8) or
    _Byte[7];
end;
  Mit Zitat antworten Zitat