我想将一个大的64位值从十进制或十六进制字符串转换为64位UINT64数据类型.有一个UIntToStr可以帮助将UINT64转换为字符串,但没有办法将64位整数转换为无符号值,作为字符串.这意味着使用RTL不能用十进制或十六进制表示大于2**63的整数值.这通常不是什么大问题,但是可能发生用户需要输入一个值,作为无符号整数,必须作为64位无符号整数值存储到注册表中.
procedure HandleLargeHexValue;
var
x:UINT64;
begin
x := $FFFFFFFFFFFFFFFE;
try
x := StrToInt('$FFFFFFFFFFFFFFFF'); // range error.
except
x := $FFFFFFFFFFFFFFFD;
end;
Caption := UintToStr(x);
end;
Run Code Online (Sandbox Code Playgroud)
Update Val现在可以在Delphi XE4及更高版本中正常运行.在XE3及以下Val('$ FFFFFFFFFFFFFFFF')有效,但不是Val('9223372036854775899').正如Roeland在Quality Central 108740中指出的那样:在Delphi XE4之前,System.Val在十进制中存在大的UInt64值问题.
我有一个问题,用Delphi转换整数值的十六进制值的字符串表示.
例如:
当我使用该功能时,$ FC75B6A9D025CB16给我802829546:
Abs(StrToInt64('$FC75B6A9D025CB16'))
Run Code Online (Sandbox Code Playgroud)
但如果我使用Windows的calc程序,结果是:18191647110290852630
所以我的问题是:谁是对的?我,还是钙?
有人有这种问题吗?