delphi - 在 Delphi 中将 GetHashCode 的 double 转换为整数

标签 delphi hash double gethashcode

Delphi 2009 为 TObject 添加了 GetHashCode 函数。 GetHashCode 返回一个 Integer,用于 TDictionary 中的哈希。

如果您希望对象在 TDictionary 中正常工作,则需要适本地重写 GetHashCode,以便通常不同的对象返回不同的整数哈希代码。

但是对于包含双字段的对象该怎么办?如何将这些 double 值转换为 GetHashCode 的整数?

例如,在 Java 中通常完成的方式是使用 Double.doubleToLongBits 或 Float.floatToIntBits 等方法。后者的文档对其进行了如下描述:“根据 IEEE 754 浮点“单一格式”位布局返回指定浮点值的表示形式。”这涉及到对浮点值的不同位使用不同掩码的一些按位运算。

Delphi 中有这样做的函数吗?

最佳答案

我建议对 Gamecat 代码进行以下改进:

type
  TVarRec = record
    case Integer of
      0: ( FInt1, FInt2 : Integer; )
      1: ( FDouble : Double; )
  end;

function Convert(const ADouble: Double): Integer;
var
  arec : TVarRec;
begin
  arec.FDouble := ADouble;
  Result := arec.FInt1 xor arec.FInt2;
end;

这考虑了 Double 值的所有位。

(注释不能很好地与代码配合使用)

关于delphi - 在 Delphi 中将 GetHashCode 的 double 转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1288176/

相关文章:

java - MD5 哈希更快

返回整数(32 位 int)的 PHP 哈希函数

java - 为什么 Java 中的十六进制实数需要指数

java - line.split (",")[1] 是什么意思 [Java]?

Delphi - TValue 到指针和返回

Delphi7 - 如何复制正在写入的文件

delphi - Indy IMAP - 使用哪个属性来识别新电子邮件?

xcode - Firemonkey App 无法上传到 Mac App Store

Ruby 动态地将键和值添加到哈希中

java - 有人能解释一下舍入误差是什么意思吗?