2015-05-05 101 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值。

相关问题