Я хочу преобразовать большое 64-битное значение из десятичной или шестнадцатеричной строки в 64-битный тип данных UINT64. Существует UIntToStr, помогающий преобразовать UINT64 в строку, но не способ конвертировать 64-битное целое число в значение без знака как строку. Это означает, что целочисленные значения, превышающие 2 ** 63, не могут быть представлены десятичным или шестнадцатеричным, используя RTL. Обычно это не очень важно, но может случиться так, что пользователю необходимо ввести значение как целое число без знака, которое должно быть сохранено в реестре как целое число без знака в 64 бит.
procedure HandleLargeHexValue;
var
x:UINT64;
begin
x := $FFFFFFFFFFFFFFFE;
try
x := StrToInt('$FFFFFFFFFFFFFFFF'); // range error.
except
x := $FFFFFFFFFFFFFFFD;
end;
Caption := UintToStr(x);
end;
Обновление Val теперь отлично работает в Delphi XE4 и выше. В XE3 и ниже Val ('$ FFFFFFFFFFFFFFFF') работает, но не Val ('9223372036854775899'). Как указывает Roeland ниже в Quality Central 108740: System.Val имел проблемы с большими значениями UInt64 в десятичном значении до Delphi XE4.