2016-02-01 113 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,但通常您會花費盡可能多的時間進行轉換,因爲您會找到匹配項,所以除非您有更多的按位數學計算地址,你可以保留它作爲字節。