如何在 C# 中实现 sdbm 哈希函数?
Posted
技术标签:
【中文标题】如何在 C# 中实现 sdbm 哈希函数?【英文标题】:How would a sdbm hash function be implemented in C#? 【发布时间】:2010-09-06 04:02:53 【问题描述】:如何在 C# 中实现sdbm
哈希函数(如this)?
【问题讨论】:
【参考方案1】:您几乎可以不加改动地获取 C 代码:
uint sdbm( string str )
uint hash = 0;
foreach( char ch in str )
hash = ch + (hash << 6) + (hash << 16) - hash;
return hash;
或者您是否想到了更复杂的东西?
【讨论】:
【参考方案2】:我没有设置 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()
;
【讨论】:
【参考方案3】:散列的结果在 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));
【讨论】:
以上是关于如何在 C# 中实现 sdbm 哈希函数?的主要内容,如果未能解决你的问题,请参考以下文章