我需要根据 IP 地址和端口号计算的哈希值。我找到了以下示例,并且通过跟踪,我可以看到它返回了一个我认为没问题的三位数哈希值。 但是,我想更详细地了解会发生什么,但我很难搞清楚。
代码片段如下:
((addr.s_addr ^ (addr.s_addr>>8)^ntohs(port) & 255);
addr.s_addr 是一个无符号长整数(32 位)。 端口是无符号短(16 位)。
IP 地址值 192.168.50.70 和端口号 60049 返回哈希值 249(当用 %d 打印时)。
任何人都可以帮助我了解该操作的实际作用吗? :)
谢谢。
亲切的问候 安德烈亚斯
最佳答案
这不是什么大谜:它异或 (^) adds.s_addr 本身向右移动了 8 个空格;然后将它与端口号进行异或运算,最后将整个内容与 255 进行与运算以将其长度限制为 8 个字节。
关于c - 位运算剖析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8429660/