生活随笔
收集整理的這篇文章主要介紹了
JAVA【long值与ip地址互转】 - ip的判别
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
閱讀前提: 您需要了解什么是 ip地址
?本章目的:實(shí)現(xiàn)ip地址和 long類型值的互轉(zhuǎn)
一、應(yīng)用范圍
? ? 一般用在登錄限制、查找IP所在城市等需求中,windows的ping命令也支持整數(shù)形式的IP。
二、關(guān)鍵技術(shù)點(diǎn)
? ? 將IP地址轉(zhuǎn)化成整數(shù)的方法如下:
? ? 1、通過String的indexOf方法找出IP字符串中的點(diǎn)"."的位置。
? ? 2、根據(jù)點(diǎn)的位置,使用String的substring方法把IP字符串分成4段。
? ? 3、使用Long的parseLong方法把子段轉(zhuǎn)化成一個3位整數(shù)。
? ? 4、通過左移位操作(<<)給每一段的數(shù)字加權(quán),第一段的權(quán)為2的24次方,第二段的權(quán)為2的16次方,第三段的權(quán)為2的8次方,最后一段的權(quán)為1
? ?
? ? 將整數(shù)形式的IP地址轉(zhuǎn)化成字符串的方法如下:
? ? 1、將整數(shù)值進(jìn)行右移位操作(>>>),右移24位,右移時高位補(bǔ)0,得到的數(shù)字即為第一段IP。
? ? 2、通過與操作符(&)將整數(shù)值的高8位設(shè)為0,再右移16位,得到的數(shù)字即為第二段IP。
? ? 3、通過與操作符吧整數(shù)值的高16位設(shè)為0,再右移8位,得到的數(shù)字即為第三段IP。
? ? 4、通過與操作符吧整數(shù)值的高24位設(shè)為0,得到的數(shù)字即為第四段IP。
public?class?IPtoLong?{//將127.0.0.1形式的IP地址轉(zhuǎn)換成十進(jìn)制整數(shù),這里沒有進(jìn)行任何錯誤處理public?static?long?ipToLong(String?strIp){long[]?ip?=?new?long[4];//先找到IP地址字符串中.的位置int?position1?=?strIp.indexOf(".");int?position2?=?strIp.indexOf(".",?position1?+?1);int?position3?=?strIp.indexOf(".",?position2?+?1);//將每個.之間的字符串轉(zhuǎn)換成整型ip[0]?=?Long.parseLong(strIp.substring(0,?position1));ip[1]?=?Long.parseLong(strIp.substring(position1+1,?position2));ip[2]?=?Long.parseLong(strIp.substring(position2+1,?position3));ip[3]?=?Long.parseLong(strIp.substring(position3+1));return?(ip[0]?<<?24)?+?(ip[1]?<<?16)?+?(ip[2]?<<?8)?+?ip[3];}//將十進(jìn)制整數(shù)形式轉(zhuǎn)換成127.0.0.1形式的ip地址public?static?String?longToIP(long?longIp){StringBuffer?sb?=?new?StringBuffer("");//直接右移24位sb.append(String.valueOf((longIp?>>>?24)));sb.append(".");//將高8位置0,然后右移16位sb.append(String.valueOf((longIp?&?0x00FFFFFF)?>>>?16));sb.append(".");//將高16位置0,然后右移8位sb.append(String.valueOf((longIp?&?0x0000FFFF)?>>>?8));sb.append(".");//將高24位置0sb.append(String.valueOf((longIp?&?0x000000FF)));return?sb.toString();}public?static?void?main(String[]?args){String?ipStr?=?"58.50.24.78";long?longIp?=?IPtoLong.ipToLong(ipStr);System.out.println("整數(shù)形式為:"?+?longIp);System.out.println("整數(shù)"?+?longIp?+?"轉(zhuǎn)化成字符串IP地址:"+?IPtoLong.longToIP(longIp));//ip地址轉(zhuǎn)化成二進(jìn)制形式輸出System.out.println("二進(jìn)制形式為:"?+?Long.toBinaryString(longIp));}}
?
?
轉(zhuǎn)載于:https://my.oschina.net/infiniteSpace/blog/313525
總結(jié)
以上是生活随笔為你收集整理的JAVA【long值与ip地址互转】 - ip的判别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。