如何在Delphi7中定义无符号的64位整数?

The*_*bie 10 delphi uint64

在Delphi 7中,int64s是签名的,如果我尝试声明一个大于$ 8000000000000000的十六进制常量(例如,什么是uint64)我得到一个错误.你能告诉一些解决方法吗?

Joh*_*ica 5

您可以像这样制作变体记录

type muint64 = record
  case boolean of
    true: (i64 : int64);
    false:(lo32, hi32: cardinal);
end;
Run Code Online (Sandbox Code Playgroud)

现在您可以使用红衣主教用无符号数据填充您的uint64.

另一种选择是使用这样的代码:

const almostmaxint64 = $800000045000000; 
var muint64: int64;    
begin
   muint64:= almostmaxint64;
   muint64:= muint64 shl 1;
end
Run Code Online (Sandbox Code Playgroud)

  • 你刚刚重新设计了`Int64Rec`类型,专门用于此目的.另外,应该使用基本的`LongWord`类型而不是通用的`Cardinal`.此外,DWORD交换. (4认同)

Dav*_*nan 2

如果没有编译器的支持,您就没有太多选择。

我假设您希望将值传递给某个外部 DLL 中的函数。您必须将参数声明为带符号的 64 位整数Int64. 然后您所能做的就是传入与所需无符号值具有相同位模式的有符号值。使用支持无符号 64 位整数的编译器为自己构建一个小型转换器工具。