GetHashCode - 从64位地址生成哈希码

时间:2016-05-10 19:39:23

标签: c++-cli gethashcode

我们有一个32位的C ++ / CLI程序集,其中一个类包装了一个本机对象。它重写GetHashCode以返回它包装的本机对象的地址(m_native是一个指针):

int NativeWrapper::GetHashCode()
{
    return (int)m_native;
}

我现在正在将此程序集转换为支持64位,因此当前的GetHashCode实现不再适用。有没有合适的算法从64位地址生成哈希码?或者我错过了一个更容易的替代方案?

1 个答案:

答案 0 :(得分:1)

我会使用与.Net框架相同的算法来生成hash code of an Int64:低32位与高32位进行异或。

int NativeWrapper::GetHashCode()
{
    return ((int)m_native) ^ (int)(m_native >> 32);
}

虽然,你可以为简单截断做一个案例:这就是IntPtr.GetHashCode的作用。

如果你想支持双32/64编译,可能将m_native转换为IntPtr并使用其GetHashCode将是一个很好的实现,可以在32位和64位模式下工作。