修改DJB2哈希函数

时间:2013-07-01 21:27:34

标签: c hash

我使用sendto如下所示通过UDP套接字发送一些文本。

char *buf = "hello";
sendto(s, buf, strlen(buf)+1, 0, (struct sockaddr *) &si_other, slength);

我想在字符串的末尾添加一个哈希值。我打算使用DJB2 function on this link

但是该函数生成一个太长的哈希值(261238937 =“hello”),因为我将它转换为字符串并将更多的元素扩展char数组。因此,我计划将unsigned long替换为生成较短(12441)值的uint16_t

uint16_t hash(unsigned char *str){
    uint16_t long hash = 5381;
    int c;

    while (c = *str++)
        hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
    return hash;
}

我想知道这种修改是否会导致算法出现问题?如何才能使代码“以字节顺序”?

0 个答案:

没有答案