java实现ip地址与十进制数相互转换

来源:互联网 发布:网络教育机构排名 编辑:程序博客网 时间:2024/05/18 01:05
先看实例 
代码如下 
复制代码代码如下:

classip 

privatestaticlongiptolong(stringstrip) 
//将127.0.0.1形式的ip地址转换成10进制整数,这里没有进行任何错误处理 

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进制整数形式转换成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地址的各种表现形式:rn"); 
system.out.print("32位二进制形式:"); 
system.out.println(long.tobinarystring(3396362403l)); 
system.out.print("十进制形式:"); 
system.out.println(iptolong("202.112.96.163")); 
system.out.print("普通形式:"); 
system.out.println(longtoip(3396362403l)); 



运行结果: 
ip地址的各种表现形式: 
32位二进制形式:11001010011100000110000010100011 
十进制形式:3396362403 
普通形式:202.112.96.163. 
输出完成(耗时1秒)-正常终止 
我们再一步步分开来分析一下 
知识点:一个二进制数,按位左移n位,就是把该数的值乘以2的n次方 
二进制除二即右移一位 
1、IP地址转换为整数 
原理:IP地址每段可以看成是8位无符号整数即0-255,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成 
一个无符号32为整数。 
举例:一个ip地址为10.0.3.193 
每段数字相对应的二进制数 
1000001010 
000000000 
300000011 
19311000001 
组合起来即为:00001010000000000000001111000001,转换为10进制就是:167773121,即该IP地址转换后的数字就是它了。 
代码如下 
复制代码代码如下:

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、整数转换为IP地址 
原理:把这个整数转换成一个32位二进制数。从左到右,每8位进行一下分割,得到4段8位的二进制数,把这些二进制数转换成整数然后加上”。”就是这个ip地址了 
举例:167773121 
二进制表示形式为:00001010000000000000001111000001 
分割成四段:00001010,00001010,00000011,11000001,分别转换为整数后加上“。”就得到了10.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(); 

0 0
原创粉丝点击