Как можно использовать функцию хеша sdbm
(например, this) на C#?Как реализовать функцию хеш-памяти sdbm в C#?
3
A
ответ
4
Вы можете взять код 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;
}
Если вам просто нужно получить хэш строки, и это не имеет большого значения, какова реализация, вы всегда можете делать theString.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));