2016-02-01 72 views
0

我们试图实现IPv6地址的最长前缀匹配。代表IPv6地址执行此计算(最长前缀匹配)的最佳方法是什么?最长的IPv6前缀匹配

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

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

新到这个层次的堆栈,并想知道是否有什么我失踪。

任何能够帮助我向正确方向移动的指针都会受到高度赞赏。

仅供参考,这是在斯卡拉。 (所以任何与JVM相关的指针都会有所帮助)

回答

0

如果你只是保留原来的两个数组,并用while循环扫描字节,直到它们不相同,那么你应该尽可能快地。一旦你得到一击,如果你想知道什么咬它,使用

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

算多少i个指标中位(假设ab是你的阵列)的比赛。

可以考虑首先转换为更大的数字类型,如Long,但通常您会花费尽可能多的时间进行转换,因为您会找到匹配项,所以除非您有更多的按位数学计算地址,你可以保留它作为字节。