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

相關問題