java实现ip地址与十进制数相互转换
时间:2022-08-10 17:39:31
先看实例
代码如下
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();
}
}
标签:ip地址,转换,十进制数
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Android表格自定义控件使用详解
2023-12-23 23:35:36
![](https://img.aspxhome.com/file/2023/7/138237_0s.jpg)
IDEA搭建SpringBoot离线工程的方法
2023-04-11 05:50:42
![](https://img.aspxhome.com/file/2023/0/93070_0s.png)
Java方法参数传递机制原理解析
2022-04-16 19:10:46
![](https://img.aspxhome.com/file/2023/2/69672_0s.png)
为Android系统添加config.xml 新配置的设置
2022-02-19 23:31:48
java基于swing实现的五子棋游戏代码
2023-09-24 17:31:17
![](https://img.aspxhome.com/file/2023/1/63381_0s.jpg)
使用SpringBoot获取所有接口的路由
2021-08-29 22:28:34
C#使用DoddleReport快速生成报表
2022-05-31 06:39:59
![](https://img.aspxhome.com/file/2023/2/84422_0s.png)
布隆过滤器面试如何快速判断元素是否在集合里
2022-10-17 15:55:19
![](https://img.aspxhome.com/file/2023/9/66939_0s.png)
使用flutter创建可移动的stack小部件功能
2023-06-21 12:28:25
![](https://img.aspxhome.com/file/2023/0/57150_0s.gif)
SpringBoot分离打Jar包的两种配置方式
2023-01-30 09:06:59
简单谈谈JVM、JRE和JDK的区别与联系
2023-04-20 17:14:51
![](https://img.aspxhome.com/file/2023/3/83063_0s.gif)
Mybatis如何通过接口实现sql执行原理解析
2022-11-30 11:31:26
![](https://img.aspxhome.com/file/2023/0/60480_0s.jpg)
事务在c#中的使用
2021-11-27 23:30:29
C#实现Base64处理的加密解密,编码解码示例
2023-07-15 12:11:31
java mybatis框架配置详解
2023-11-25 08:09:16
java 线程方法join简单用法实例总结
2022-10-26 19:27:38
SpringBoot整合websocket实现即时通信聊天
2022-12-12 15:14:32
![](https://img.aspxhome.com/file/2023/7/78867_0s.jpg)
Android实现的简单蓝牙程序示例
2021-06-27 01:23:44
C#实现观察者模式(Observer Pattern)的两种方式
2023-06-20 21:05:18
![](https://img.aspxhome.com/file/2023/0/66130_0s.png)
C#子类对基类方法的继承、重写与隐藏详解
2023-01-31 04:48:46
![](https://img.aspxhome.com/file/2023/7/107777_0s.png)