1

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

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

我想在字符串的末尾添加一个哈希值。我打算在这个链接上使用 DJB2 功能

但是该函数会生成一个太长的哈希值(261238937 = for "hello"),因为我会将其转换为字符串并将 char 数组扩展 9 个更多元素。因此,我打算unsigned longuint16_t生成更短 (12441) 值的替换。

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;
}

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

4

0 回答 0