如何将long unsigned转换为unsigned char*?

Jam*_*mes 2 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;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法实现我的目标,也许是两者之间的演员?

use*_*961 11

unsigned long x;

unsigned char * p = (unsigned char*)&x;
Run Code Online (Sandbox Code Playgroud)

确保在系统中使用全部4个字节p,或者unsigned long系统的长度.

  • 而且,不要忘记端序问题!如果不适当地交换字节序,则可能会为不同机器上的"相同"数据获取不同的哈希值. (3认同)
  • p是一个指针.它指向unsigned long的第一个字节.在这种情况下,变量名为"x".我猜你有一个函数采用一个usnigned char指针和一些长度.如果是这种情况,则长度应为sizeof(usnigned long)或sizeof(x). (2认同)
  • @MattPhillips这假设散列函数将空终止字符串作为输入.通常,散列函数采用长度参数和缓冲区指针,而不是空终止字符串. (2认同)