java實(shí)現(xiàn)ip地址與十進(jìn)制數(shù)相互轉(zhuǎn)換
更新時(shí)間:2012年12月02日 12:08:18 作者:
本文介紹在java中IP地址轉(zhuǎn)換十進(jìn)制數(shù)及把10進(jìn)制再轉(zhuǎn)換成IP地址的方法及實(shí)例參考,曬出來(lái)和大家分享一下
先看實(shí)例
代碼如下
classip
{
privatestaticlongiptolong(stringstrip)
//將127.0.0.1形式的ip地址轉(zhuǎn)換成10進(jìn)制整數(shù),這里沒(méi)有進(jìn)行任何錯(cuò)誤處理
{
intj=0;
inti=0;
long[]ip=newlong[4];
intposition1=strip.indexof(".");
intposition2=strip.indexof(".",position1+1);
intposition3=strip.indexof(".",position2+1);
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];//ip1*256*256*256+ip2*256*256+ip3*256+ip4
}
privatestaticstringlongtoip(longlongip)
//將10進(jìn)制整數(shù)形式轉(zhuǎn)換成127.0.0.1形式的ip地址,在命令提示符下輸入ping3396362403l
{
stringbuffersb=newstringbuffer("");
sb.append(string.valueof(longip>>>24));//直接右移24位
sb.append(".");
sb.append(string.valueof((longip&0x00ffffff)>>>16));//將高8位置0,然后右移16位
sb.append(".");
sb.append(string.valueof((longip&0x0000ffff)>>>8));
sb.append(".");
sb.append(string.valueof(longip&0x000000ff));
sb.append(".");
returnsb.tostring();
}
publicstaticvoidmain(string[]args)
{
system.out.println("ip地址的各種表現(xiàn)形式:rn");
system.out.print("32位二進(jìn)制形式:");
system.out.println(long.tobinarystring(3396362403l));
system.out.print("十進(jìn)制形式:");
system.out.println(iptolong("202.112.96.163"));
system.out.print("普通形式:");
system.out.println(longtoip(3396362403l));
}
}
運(yùn)行結(jié)果:
ip地址的各種表現(xiàn)形式:
32位二進(jìn)制形式:11001010011100000110000010100011
十進(jìn)制形式:3396362403
普通形式:202.112.96.163.
輸出完成(耗時(shí)1秒)-正常終止
我們?cè)僖徊讲椒珠_(kāi)來(lái)分析一下
知識(shí)點(diǎn):一個(gè)二進(jìn)制數(shù),按位左移n位,就是把該數(shù)的值乘以2的n次方
二進(jìn)制除二即右移一位
1、IP地址轉(zhuǎn)換為整數(shù)
原理:IP地址每段可以看成是8位無(wú)符號(hào)整數(shù)即0-255,把每段拆分成一個(gè)二進(jìn)制形式組合起來(lái),然后把這個(gè)二進(jìn)制數(shù)轉(zhuǎn)變成
一個(gè)無(wú)符號(hào)32為整數(shù)。
舉例:一個(gè)ip地址為10.0.3.193
每段數(shù)字相對(duì)應(yīng)的二進(jìn)制數(shù)
1000001010
000000000
300000011
19311000001
組合起來(lái)即為:00001010000000000000001111000001,轉(zhuǎn)換為10進(jìn)制就是:167773121,即該IP地址轉(zhuǎn)換后的數(shù)字就是它了。
代碼如下
publicclassIp{
publicstaticvoidmain(String[]args){
System.out.print(ip2int("10.0.3.193"));
}
publicstaticlongip2int(Stringip){
String[]items=ip.split(".");
returnLong.valueOf(items[0])<<24
|Long.valueOf(items[1])<<16
|Long.valueOf(items[2])<<8
|Long.valueOf(items[3]);
}
}
2、整數(shù)轉(zhuǎn)換為IP地址
原理:把這個(gè)整數(shù)轉(zhuǎn)換成一個(gè)32位二進(jìn)制數(shù)。從左到右,每8位進(jìn)行一下分割,得到4段8位的二進(jìn)制數(shù),把這些二進(jìn)制數(shù)轉(zhuǎn)換成整數(shù)然后加上”?!本褪沁@個(gè)ip地址了
舉例:167773121
二進(jìn)制表示形式為:00001010000000000000001111000001
分割成四段:00001010,00001010,00000011,11000001,分別轉(zhuǎn)換為整數(shù)后加上“?!本偷玫搅?0.0.3.193。
代碼如下
publicclassIp{
publicstaticvoidmain(String[]args){
System.out.print(int2ip(167773121));
}
publicstaticStringint2ip(longipInt){
StringBuildersb=newStringBuilder();
sb.append(ipInt&0xFF).append(".");
sb.append((ipInt>>8)&0xFF).append(".");
sb.append((ipInt>>16)&0xFF).append(".");
sb.append((ipInt>>24)&0xFF);
returnsb.toString();
}
}
代碼如下
復(fù)制代碼 代碼如下:
classip
{
privatestaticlongiptolong(stringstrip)
//將127.0.0.1形式的ip地址轉(zhuǎn)換成10進(jìn)制整數(shù),這里沒(méi)有進(jìn)行任何錯(cuò)誤處理
{
intj=0;
inti=0;
long[]ip=newlong[4];
intposition1=strip.indexof(".");
intposition2=strip.indexof(".",position1+1);
intposition3=strip.indexof(".",position2+1);
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];//ip1*256*256*256+ip2*256*256+ip3*256+ip4
}
privatestaticstringlongtoip(longlongip)
//將10進(jìn)制整數(shù)形式轉(zhuǎn)換成127.0.0.1形式的ip地址,在命令提示符下輸入ping3396362403l
{
stringbuffersb=newstringbuffer("");
sb.append(string.valueof(longip>>>24));//直接右移24位
sb.append(".");
sb.append(string.valueof((longip&0x00ffffff)>>>16));//將高8位置0,然后右移16位
sb.append(".");
sb.append(string.valueof((longip&0x0000ffff)>>>8));
sb.append(".");
sb.append(string.valueof(longip&0x000000ff));
sb.append(".");
returnsb.tostring();
}
publicstaticvoidmain(string[]args)
{
system.out.println("ip地址的各種表現(xiàn)形式:rn");
system.out.print("32位二進(jìn)制形式:");
system.out.println(long.tobinarystring(3396362403l));
system.out.print("十進(jìn)制形式:");
system.out.println(iptolong("202.112.96.163"));
system.out.print("普通形式:");
system.out.println(longtoip(3396362403l));
}
}
運(yùn)行結(jié)果:
ip地址的各種表現(xiàn)形式:
32位二進(jìn)制形式:11001010011100000110000010100011
十進(jìn)制形式:3396362403
普通形式:202.112.96.163.
輸出完成(耗時(shí)1秒)-正常終止
我們?cè)僖徊讲椒珠_(kāi)來(lái)分析一下
知識(shí)點(diǎn):一個(gè)二進(jìn)制數(shù),按位左移n位,就是把該數(shù)的值乘以2的n次方
二進(jìn)制除二即右移一位
1、IP地址轉(zhuǎn)換為整數(shù)
原理:IP地址每段可以看成是8位無(wú)符號(hào)整數(shù)即0-255,把每段拆分成一個(gè)二進(jìn)制形式組合起來(lái),然后把這個(gè)二進(jìn)制數(shù)轉(zhuǎn)變成
一個(gè)無(wú)符號(hào)32為整數(shù)。
舉例:一個(gè)ip地址為10.0.3.193
每段數(shù)字相對(duì)應(yīng)的二進(jìn)制數(shù)
1000001010
000000000
300000011
19311000001
組合起來(lái)即為:00001010000000000000001111000001,轉(zhuǎn)換為10進(jìn)制就是:167773121,即該IP地址轉(zhuǎn)換后的數(shù)字就是它了。
代碼如下
復(fù)制代碼 代碼如下:
publicclassIp{
publicstaticvoidmain(String[]args){
System.out.print(ip2int("10.0.3.193"));
}
publicstaticlongip2int(Stringip){
String[]items=ip.split(".");
returnLong.valueOf(items[0])<<24
|Long.valueOf(items[1])<<16
|Long.valueOf(items[2])<<8
|Long.valueOf(items[3]);
}
}
2、整數(shù)轉(zhuǎn)換為IP地址
原理:把這個(gè)整數(shù)轉(zhuǎn)換成一個(gè)32位二進(jìn)制數(shù)。從左到右,每8位進(jìn)行一下分割,得到4段8位的二進(jìn)制數(shù),把這些二進(jìn)制數(shù)轉(zhuǎn)換成整數(shù)然后加上”?!本褪沁@個(gè)ip地址了
舉例:167773121
二進(jìn)制表示形式為:00001010000000000000001111000001
分割成四段:00001010,00001010,00000011,11000001,分別轉(zhuǎn)換為整數(shù)后加上“?!本偷玫搅?0.0.3.193。
代碼如下
復(fù)制代碼 代碼如下:
publicclassIp{
publicstaticvoidmain(String[]args){
System.out.print(int2ip(167773121));
}
publicstaticStringint2ip(longipInt){
StringBuildersb=newStringBuilder();
sb.append(ipInt&0xFF).append(".");
sb.append((ipInt>>8)&0xFF).append(".");
sb.append((ipInt>>16)&0xFF).append(".");
sb.append((ipInt>>24)&0xFF);
returnsb.toString();
}
}
您可能感興趣的文章:
- 基于Java解決華為機(jī)試實(shí)現(xiàn)密碼截取?
- 基于Java解決華為機(jī)試之字符串加解密?
- ?基于Java解決華為機(jī)試之字符串合并處理實(shí)操
- java實(shí)現(xiàn)IP地址轉(zhuǎn)換
- Java實(shí)現(xiàn)IP地址到二進(jìn)制的轉(zhuǎn)換
- Java實(shí)現(xiàn)ip地址和int數(shù)字的相互轉(zhuǎn)換
- Java編程IP地址和數(shù)字相互轉(zhuǎn)換代碼示例
- 使用Java代碼將IP地址轉(zhuǎn)換為int類型的方法
- 基于Java解決華為機(jī)試實(shí)現(xiàn)整數(shù)與IP地址間的轉(zhuǎn)換?
相關(guān)文章
mybatisplus?selectOne查詢,有數(shù)據(jù),但返回為null問(wèn)題
這篇文章主要介紹了mybatisplus?selectOne查詢,有數(shù)據(jù),但返回為null問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
一文帶你吃透JSP增刪改查實(shí)戰(zhàn)案例詳細(xì)解讀
這篇文章主要為大家詳細(xì)介紹了JSP中增刪改查實(shí)戰(zhàn)案例的相關(guān)知識(shí),文中的示例代碼講解現(xiàn)象,具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下2023-03-03
java對(duì)接微信支付SDK接口簡(jiǎn)單圖文教程
在微信支付接口對(duì)接過(guò)程中,開(kāi)發(fā)者需準(zhǔn)備多項(xiàng)關(guān)鍵參數(shù),如開(kāi)發(fā)者ID(appid)、商戶號(hào)等,并完成相關(guān)注冊(cè)與認(rèn)證流程,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-11-11
Java利用LocalDate進(jìn)行日期處理的完全指南
這篇文章主要為大家詳細(xì)介紹了Java利用LocalDate進(jìn)行日期處理的詳細(xì)教程,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-03-03
帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之?dāng)?shù)組
這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之?dāng)?shù)組,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01
IDEA如何修改maven的JVM啟動(dòng)內(nèi)存參數(shù)
這篇文章主要介紹了IDEA如何修改maven的JVM啟動(dòng)內(nèi)存參數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09

