如何在C#中实现sdbm
哈希函数(例如此处)?
uint sdbm( string str )
{
uint hash = 0;
foreach( char ch in str )
{
hash = ch + (hash << 6) + (hash << 16) - hash;
}
return hash;
}
我没有设置C编译器,所以无法测试它是否执行相同的操作,但我认为以下内容是正确的:
private static ulong SBDM(string str)
{
ulong hash = 0;
foreach (char c in str)
{
hash = c + (hash << 6) + (hash << 16) - hash;
}
return hash;
}
String.GetHashCode()
方法。哈希的结果在C++和C#实现之间不同。我发现需要将str参数作为字节数组传递。
private uint sdbm(byte[] str)
{
uint hash = 0;
foreach (char ch in str)
hash = ch + (hash << 6) + (hash << 16) - hash;
return hash;
}
通过使用BitConverter.GetBytes
方法将要哈希的值转换后调用该方法。
uint Hash = sdbm(BitConverter.GetBytes(myID));