Convert hex str to decimal value in delphi

Simon Mardiné picture Simon Mardiné · Dec 12, 2012 · Viewed 27.3k times · Source

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?

Answer

whosrdaddy picture whosrdaddy · Dec 12, 2012

In fact 802829546 is clearly wrong here.

Calc returns a 64bit unsigned value (18191647110290852630d).

Delphi Int64 type uses highest bit as sign:

Int := StrToInt64('$FC75B6A9D025CB16');
Showmessage(IntToStr(Int));

returns value -255096963418698986 which is correct

If you need to work with values larger than 64bit signed, then check out Arnaud's answer here.