我正在尝试哈希unsigned long
值,但是哈希函数采用unsigned char *
,如以下实现所示:
unsigned long djb2(unsigned char *key, int n)
{
unsigned long hash = 5381;
int i = 0;
while (i < n-8) {
hash = hash * 33 + key[i++];
hash = hash * 33 + key[i++];
hash = hash * 33 + key[i++];
hash = hash * 33 + key[i++];
hash = hash * 33 + key[i++];
hash = hash * 33 + key[i++];
hash = hash * 33 + key[i++];
hash = hash * 33 + key[i++];
}
while (i < n)
hash = hash * 33 + key[i++];
return hash;
}
有没有办法实现我的目标,也许在两者之间进行转换?
最佳答案
unsigned long x;
unsigned char * p = (unsigned char*)&x;
确保通过
p
使用所有4个字节,或者系统上unsigned long
的长度是多少。
关于c - 如何将长无符号转换为无符号char *?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16537069/