最长的IPv6前缀匹配

时间:2016-02-01 21:45:31

标签: scala ipv6 bitset

我们正在尝试实现IPv6地址的最初前缀匹配。表示IPv6地址以有效执行此计算(最长前缀匹配)的最佳方法是什么。

IPv6地址通常以Array [Byte]表示。 (IPv6地址通常用Array [Byte] [16]表示)。

要找到最长的前缀匹配,我们需要将地址转换为BitSet(或某种位的数组表示),然后找出最长的前缀。

这个堆栈级别的新手,并想知道我是否有任何遗漏。

任何有助于我向正确方向前进的指针都非常受欢迎。

仅供参考,这是在Scala上。 (因此任何与JVM相关的指针都会有所帮助)

1 个答案:

答案 0 :(得分:0)

如果您只保留原始的两个阵列并使用while循环扫描字节,直到它们不相同,那么您应该尽可能快。一旦你受到了打击,如果你想知道它是什么位,请使用

java.lang.Integer.numberOfLeadingZeros((a[i] << 24) ^ (b[i] << 24))

计算i索引中的位数(假设ab是您的数组)匹配。

首先可以考虑转换为更大的数字类型,例如Long,但通常你会花费尽可能多的时间进行转换,就像找到匹配一样,所以除非你有一堆更多要对地址进行逐位数学运算,您也可以将其保存为字节。