将无符号整数转换回 char*?
Convert an unsigned integer back to char*?
我有一个散列函数 returns 返回给我一个无符号整数 uint32_t
给定 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) != '[=10=]'; ++word)
{
h ^= ( (h<<5) + c + (h >> 2) );
}
return ((uint32_t)(h&0x7fffffff) % tsize);
}
现在我想做相反的事情:假设我得到了 uint32_t
号码,我想恢复到之前在 char*
中的原始形式。我怎样才能做到这一点?基本上我的 uint32_t
号码应该给我返回传递的原始 char*。
由于散列冲突,这不会起作用:字节数组有任意多种可能的排列,但只有固定数量的不同 uint32_t
,因此一堆不同的 char *
正在发生散列到 相同 uint32_t
值。
我有一个散列函数 returns 返回给我一个无符号整数 uint32_t
给定 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) != '[=10=]'; ++word)
{
h ^= ( (h<<5) + c + (h >> 2) );
}
return ((uint32_t)(h&0x7fffffff) % tsize);
}
现在我想做相反的事情:假设我得到了 uint32_t
号码,我想恢复到之前在 char*
中的原始形式。我怎样才能做到这一点?基本上我的 uint32_t
号码应该给我返回传递的原始 char*。
由于散列冲突,这不会起作用:字节数组有任意多种可能的排列,但只有固定数量的不同 uint32_t
,因此一堆不同的 char *
正在发生散列到 相同 uint32_t
值。