我正在尝试在Delphi中定义一个常量:

const
   FNV_offset_basis = 14695981039346656037;

我收到错误:整数常量太大



我如何声明这个Int64常量?

我尝试过的其他一些事情:
const
   FNV_offset_basis: Int64 = 14695981039346656037;
   FNV_offset_basis = Int64(14695981039346656037);
   FNV_offset_basis: Int64 = Int64(14695981039346656037);


var
   offset: LARGE_INTEGER;
begin
   //recalculate constant every function call
   offset.LowPart = $739D0383;
   offset.HighPart = $14650FB0;

更正

我的基本假设是错误的。

14695981039346656037粘贴到Windows 7计算器中,然后转换为十六进制,使我相信14695981039346656037的十六进制等效为0x14650FB0739D0383:

那是不对的。

因此,当我看到16位十六进制值且未设置高位时,我认为它可以适合64位有符号整数。

实际上,相当于14695981039346656037的十六进制是……。罗布,你是对的! (大概)

最佳答案

您在问题中的十六进制转换不正确。该数字实际上是$ cbf29ce484222000,不适合带符号的64位整数。您将需要一个无符号的64位整数来表示它。 Delphi 5中没有未签名的UInt64,因此您很不走运。在您的Delphi版本中,没有整数数据类型可以表示该数字。

如果您需要,可以将位模式解释为带符号的值。在这种情况下,您将拥有一个负数。

10-05 22:25