Сведения о вопросе

Sadijon

21:06, 1st October, 2020

Теги

c#   hash    

Как бы функция sdbm hash была реализована в C#?

Просмотров: 486   Ответов: 3

Как функция sdbm hash (например, эта ) может быть реализована в C# ?



  Сведения об ответе

DINO

12:51, 26th August, 2020

Вы можете взять код C практически без изменений:

uint sdbm( string str )
{
    uint hash = 0;
    foreach( char ch in str )
    {
        hash = ch + (hash << 6) + (hash << 16) - hash;
    }
    return hash;
}

Или вы придумали что-то более сложное?


  Сведения об ответе

ЯЯ__4

19:31, 26th August, 2020

У меня нет настроенного компилятора C, поэтому я не могу проверить, выполняет ли он то же самое, но я думаю , что следующее правильно:

private static ulong SBDM(string str)
{
    ulong hash = 0;

    foreach (char c in str)
    {
        hash = c + (hash << 6) + (hash << 16) - hash;
    }

    return hash;
}

Если вам просто нужно получить hash строки, и это не имеет большого значения, что такое реализация, вы всегда можете сделать theString.GetHashCode();


  Сведения об ответе

$DOLLAR

08:38, 10th August, 2020

Результат от hash отличается между реализацией 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));


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться