2015-05-05 4 views
0

У меня есть хэш-функция, которая возвращает назад мне целое число без знака 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 должен вернуть мне исходный символ *, который был передан.

+2

Хэш-алгоритмы - это один из способов. Вы не можете отменить хеш для создания оригинала 'char *'. Единственный вариант - использовать грубую силу - запускать каждое возможное значение «char *» через алгоритм, пока не найдете значения, которые производят один и тот же хеш. –

+3

Вы, кажется, неправильно поняли концепцию хеширования ... – John3136

+1

Аналогичный вопрос: http://stackoverflow.com/questions/29912220/crc16-to-string – samgak

ответ

1

Это не будет работать из-за хэширование столкновений: есть произвольные много перестановок байтовых массивов возможно, но только фиксированное число различных uint32_t, следовательно, куча различных char * собираются хэш жеuint32_t значения по ,