2008-08-19 14 views

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^