Различные значения для каждого подхода хеширования - PullRequest
3 голосов
/ 20 февраля 2011

Может кто-нибудь сказать, что я делаю не так? я пытаюсь хэшировать значение с помощью murmurhash, но каждый раз получаю разные значения:

std::string str = "some test string";
char out[32];

MurmurHash3_x86_32(str.c_str(), str.length(), 0, out);
unsigned int hash = reinterpret_cast<unsigned int>(out);

Ответы [ 2 ]

9 голосов
/ 20 февраля 2011

Переменная out имеет тип char [] или массив char. Это действует как указатель на char в большинстве контекстов. Здесь вы приводите значение указателя, а не содержимое, на которое указывает указатель.

Кроме того, я не знаю API MurmurHash, но массив out равен 32 байт . Вы пытаетесь привести его к 32 bit integer (при условии, что на вашей платформе 32-битные целые числа).

4 голосов
/ 20 февраля 2011

Мне кажется, MurmurHash3_x86_32 возвращает 32-битное хеш-значение.Но вы даете ему 32 байтов выходной параметр.

Вы можете просто:

std::string str = "some test string";

unsigned int hash;
MurmurHash3_x86_32(str.c_str(), str.length(), 0, &hash);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...