IP地址轉換成Long型數字演算法和原理(全網最細!!)
阿新 • • 發佈:2018-11-12
將ip地址轉換成數字地址的時候是我做一個歸屬地查詢的專案是碰見的,開始我並不明白將IP轉換成數字地址的原理,可能老師上課講了但是沒有好好聽,我覺得想理解下面演算法就應該理解IP地址和數字地址的原理(菜鳥專用(^_^))
IP地址一般是一個32位的二進位制數意思就是如果將IP地址轉換成二進位制表示應該有32為那麼長,但是它通常被分割為4個“8位二進位制數”(也就是4個位元組每,每個代表的就是小於2的8 次方)。IP地址通常用“點分十進位制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之間的十進位制整數。例:點分十進IP地址(100.4.5.6),實際上是32位二進位制數(01100100.00000100.00000101.00000110)
不知道各位理解了嗎??
瞭解遠離之後,其實有很多種演算法能在ip地址和數字地址之間轉換
我先介紹下通用的方法(菜鳥適用)
val ipV4="125.213.100.123"
val fragments = ip22.split("[.]")
var Ip_Num=125*256*256*256+213*256*256+100*256+123
println(Ip_Num) //列印的結果2111136891
這裡我介紹一個比較好用快速的方法(小牛適用)
val ip22="125.213.100.123"
val fragments = ip22.split ("[.]")
var Ip_Num = 0L
for (i <- 0 until fragments.length){
Ip_Num = fragments(i).toLong | ipNum << 8L
}
println(Ip_Num) //列印結果 2111136891
兩次列印結果一致,說明ok,關於如何根據數字地址來求ip地址,大家可以思考下
第二個演算法基礎不太好的同志可能有點看不懂,其中“ | ”符號的含義就是將兩個數字的二進位制按右端對齊,只要有數字1就換1,當兩個數字都是0才是0例如
202(二進位制:11001010) | 163(10100011)可以像下面這樣看 = = 235(11101011)
11001010
10100011
將有一的換成一,全是零的是零:11101011
然後是<<這個運算子號,這兩個都是位運算子號,例項如下:
202(11001010)<<2 ==808(1100101000) 表示202的二進位制數字在右端新增兩個零所表示的數字
不知道大家看明白了沒
建議碼住,收藏起來沒事看看,我覺得很細節