我必须将传入的 ipv4 片段散列为大小为 20 的静态结构数组。用于散列的字段是 IP-ID(16 位)、协议(protocol)(8 位)、源 IP 地址(32 位)和目标 IP 地址(32 位)。散列应该很快,并且用 C 实现起来不是很复杂。在这种情况下,什么是好的散列函数?
最佳答案
如果我理解正确并且您只需要 20 个可能的哈希值,则可以直接对数据使用模运算符 (%
)。
如果您的数据分布是有利的并且您将它们存储为整数,您可以使用 hash = ip_fragment % 20
。
看来无论如何都会发生很多碰撞,所以您可以保持简单。
关于c - 用于散列 ip 片段的散列函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39787843/