將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) //列印的結果211113689112
34這裡我介紹乙個比較好用快速的方法(小牛適用)
val ip22="125.213.100.123"
val fragments = ip22.split("[.]")
var ip_num = 0l
for (i <- 0 until fragments.length)
println(ip_num) //列印結果 211113689112
3456
7兩次列印結果一致,說明ok,關於如何根據數字位址來求ip位址,大家可以思考下
第二個演算法基礎不太好的同志可能有點看不懂,其中「 | 」符號的含義就是將兩個數字的二進位制按右端對齊,只要有數字1就換1,當兩個數字都是0才是0例如
202(二進位制:11001010) | 163(10100011)可以像下面這樣看 == 235(11101011)
11001010
10100011
將有一的換成一,全是零的是零:1110101112
34然後是《這個運算符號,這兩個都是位運算符號,例項如下:
ip位址轉換數字函式 iton IP位址轉換函式
在ascii字串 192.168.0.99 與網路位元組序的二進位制值間轉換位址。涉及函式的標頭檔案為 include 一 只適用於ipv4協議的函式 int inet aton const char string,struct in addr addr 函式成功,返回值1,否則返回零。將strin...
羅馬轉數字
羅馬數字包含以下七種字元 i,v,x,l,c,d 和 m。字元 數值 i 1 v 5 x 10 l 50 c 100 d 500 m 1000 例如,羅馬數字 2 寫做 ii 即為兩個並列的 1。12 寫做 xii 即為 x ii 27 寫做 xxvii,即為 xx v ii 通常情況下,羅馬數字中...
IP位址後面斜槓加具體數字詳解
其實這種形式就是用cidr 無類別域間路由選擇,classless and subnet address extensions and supernetting 的形式表示的乙個網段,或者說子網。我們知道確定乙個子網需要知道主機位址和子網掩碼,但用cidr的形式,可以簡單得到兩個數值。舉例說吧,19...