У меня есть хэш-функция, которая возвращает назад мне целое число без знака uint32_t
по заданному char*
, как показано ниже:Преобразование целого числа без знака обратно в char *?
uint32_t key_hashing(const char* key)
{
return hashing(key, 0x7fffffff, 101);
}
uint32_t hashing(const char* word, int tsize, uint32_t seed)
{
char c;
uint32_t h = seed;
for (; (c=*word) != '\0'; ++word)
{
h ^= ((h<<5) + c + (h >> 2));
}
return ((uint32_t)(h&0x7fffffff) % tsize);
}
Теперь я хочу сделать обратное: Допустим, я дал uint32_t
номер, я хочу вернуться назад к своей первоначальной форме, которая была в char*
ранее. Как я могу это сделать? В основном мой номер uint32_t
должен вернуть мне исходный символ *, который был передан.
Хэш-алгоритмы - это один из способов. Вы не можете отменить хеш для создания оригинала 'char *'. Единственный вариант - использовать грубую силу - запускать каждое возможное значение «char *» через алгоритм, пока не найдете значения, которые производят один и тот же хеш. –
Вы, кажется, неправильно поняли концепцию хеширования ... – John3136
Аналогичный вопрос: http://stackoverflow.com/questions/29912220/crc16-to-string – samgak