如何在C#中实现sdbm
哈希函数(例如this)?
答案 0 :(得分:3)
您几乎可以在不做更改的情况下使用C代码:
uint sdbm( string str )
{
uint hash = 0;
foreach( char ch in str )
{
hash = ch + (hash << 6) + (hash << 16) - hash;
}
return hash;
}
或者您是否想到更复杂的东西?
答案 1 :(得分:1)
我没有设置C编译器所以我无法测试它是否执行相同,但我认为以下是正确的:
private static ulong SBDM(string str)
{
ulong hash = 0;
foreach (char c in str)
{
hash = c + (hash << 6) + (hash << 16) - hash;
}
return hash;
}
如果您只需要获取字符串的哈希值并且实现的内容并不重要,您可以随时执行theString.GetHashCode();
答案 2 :(得分:0)
散列的结果在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));