如何在C#中实现sdbm哈希函数?

3

如何在C#中实现sdbm哈希函数(例如此处)?

3个回答

3
您可以几乎不更改C代码:
uint sdbm( string str )
{
    uint hash = 0;
    foreach( char ch in str )
    {
        hash = ch + (hash << 6) + (hash << 16) - hash;
    }
    return hash;
}

或者你想到了更高级的东西?

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;
}

如果您只需要获取字符串的哈希值,并且实现方式并不太重要,那么您可以使用 String.GetHashCode() 方法。

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));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接