首页 文章

最长的IPv6前缀匹配

提问于
浏览
0

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

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

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

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

任何有助于我向正确方向前进的指针都非常感谢 .

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

1 回答

  • 0

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

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

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

    可以考虑首先转换为更大的数字类型,如 Long ,但通常你会花费更多的时间进行转换,因为你会找到匹配,所以除非你有更多的数学要做地址,你也可以把它保存为字节 .

相关问题