c - 如何将长无符号转换为无符号char *?

标签 c casting

我正在尝试哈希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/

相关文章:

c++ - 不允许从 'const char *' 到 'void *' 的 static_cast

java - 无法从类型对象转换为 long

c - c中没有静态 vector 的图中的最短路径

c - 如何在 Darwin 下启用大文件支持?

c - 如何在数组中连续写入

c++ - 如果我想将一个无符号整数四舍五入为最接近的更小或相等的偶数,我可以除以 2 然后乘以 2 吗?

C程序跳行

c++ - 转换一个由迭代器指向的对象

java - 来自单个对象的接口(interface)集合

C# 数组索引器