我正在尝试在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版本中,没有整数数据类型可以表示该数字。
如果您需要,可以将位模式解释为带符号的值。在这种情况下,您将拥有一个负数。