I've got a problem to convert a string representation of an hex value in integer value with Delphi.
for example:
$FC75B6A9D025CB16 give me 802829546 when i use the function:
Abs(StrToInt64('$FC75B6A9D025CB16'))
but if i use the calc program from Windows, the result is: 18191647110290852630
So my question is: who's right? me, or the calc?
Does anybody already have this kind of problem?
to work with big numbers you need external library for delphi
Large numbers in Pascal (Delphi)
The number is too big to be represented as a signed 64-bit number.
The largest possible signed 64-bit value is
I had to use a Delphi library named "DFF Library" because I work on Delphi6 and the type
Uint64
does not exist in this version.Main page
Here's my code to transform a string of hexadecimal value to a string of decimal value:
You need to add
UBigIntsV3
to your uses in your unit.In fact
802829546
is clearly wrong here.Calc returns a 64bit unsigned value (
18191647110290852630d
).Delphi Int64 type uses highest bit as sign:
returns value
-255096963418698986
which is correctIf you need to work with values larger than 64bit signed, then check out Arnaud's answer here.