IntToHex for UInt64 in Delphi

 Delphi  Comments Off on IntToHex for UInt64 in Delphi
Jul 292020
 

Just in case I ever need this again:

function IntToHex(_Value: UInt64): string; overload;
var
  Buf: PUInt32;
begin
  Buf := PUInt32(UInt32(@_Value) + 8);
  Result := IntToHex(Buf^, 8);
  Buf := PUInt32(@_Value);
  Result := Result + IntToHex(Buf^, 8);
end;

(Delphi 2007 does not have IntToHex for UInt64.)

Note: This works only for 32 bit compilers. For 64 bit, you must replace UInt32 with NativeUInt (or UInt64) in the first line (untested). Since unfortunately the NativeUInt declaration in Delphi 2007 is wrong, I cannot simply use NativeUInt here and be done with it.

Note: This works only on little endian systems (Intel):

"The little-endian system has the property that the same value can be read from memory at different lengths without using different addresses (even when alignment restrictions are imposed). For example, a 32-bit memory location with content 4A 00 00 00 can be read at the same address as either 8-bit (value = 4A), 16-bit (004A), 24-bit (00004A), or 32-bit (0000004A), all of which retain the same numeric value. Although this little-endian property is rarely used directly by high-level programmers, it is often employed by code optimizers as well as by assembly language programmers."

Source: Wikipedia – Endianness

 Posted by on 2020-07-29 at 14:38