如何将Delphi中的GetHashCode返回的Double类型转换为Integer类型?
- 内容介绍
- 文章标签
- 相关推荐
本文共计277个文字,预计阅读时间需要2分钟。
Delphi 2009 将 `GetHashCode` 函数添加到 `TObject` 类中。`GetHashCode` 返回一个整数,用于在 `TDictionary` 中进行散列。若希望对象在 `TDictionary` 中正常工作,需要适当地重写 `GetHashCode`,以确保不同对象返回不同的哈希值。
Delphi 2009将GetHashCode函数添加到TObject. 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值的所有位.
(评论不适用于代码)
本文共计277个文字,预计阅读时间需要2分钟。
Delphi 2009 将 `GetHashCode` 函数添加到 `TObject` 类中。`GetHashCode` 返回一个整数,用于在 `TDictionary` 中进行散列。若希望对象在 `TDictionary` 中正常工作,需要适当地重写 `GetHashCode`,以确保不同对象返回不同的哈希值。
Delphi 2009将GetHashCode函数添加到TObject. 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值的所有位.
(评论不适用于代码)

