我正在寻找一种将 IP 地址映射到数组中的索引的好方法。假设我有一个 32 大小的数组,我们可以从用户输入获得的最大可能 IP 地址将始终 <= 32。我想将此 IP 地址映射到数组中的某个索引位置,然后使用此索引位置来引用这个IP地址。
执行此操作的最佳技术是什么? IP 地址本质上只是一个整数。如果两个地址映射到相同的索引位置,也需要处理冲突。
ip1 => 转换为某个整数,比如 i1 => 索引现在只是 i1 % 32
任何适合此用例的哈希技术来转换 IP 地址也将很有用。
感谢您的帮助。
最佳答案
您是否期望针对您的问题提供任何哈希算法引用?
因为数组大小为 32。
您可以仅使用 IP 地址中设置的位数来索引数组位置。但是所有 0 和所有 1 都不是已使用的地址,因此您会丢失 2 个位置。 您可以使用所有半字节的总和进行检查,忽略散列的进位位。您可以根据数组大小增加添加的位数。
您还可以仅将哈希值基于 IP 地址的 2 个字节,因为单个子网中的高阶字节可能相同。
对于冲突的情况,您需要有一个指针数组而不是一维数组,以便您可以使用相同的哈希存储多个地址。
关于c - 将 IP 地址映射到数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33072864/