Я пытаюсь реализовать алгоритм DJB в C для создания словаря, подобного структуре.
Моя реализация работает хорошо, если переданный ключ является указателем на символ, однако, если я передаю, например, целое число, он падает, яЯ не уверен, почему и как я мог сделать это.По сути, мне нужно было бы хэшировать как строку, так и целое число.
static unsigned int DJBHash(void* key, unsigned int len) {
unsigned int hash = 5381;
unsigned int i = 0;
char* ptr = (char *)key;
for (i = 0; i < len; i++)
{
hash += hash << 5;
hash += *ptr; /* crashes if key is not originally a char* */
ptr++;
}
return hash;
}
это просто вызывается для получения значения хеш-функции: DJBHash((void*)420, sizeof(420));
падает, в то время как DJB((void*)"foo", sizeof("foo"));
работает отлично.