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

 更新时间:2012年12月02日 12:08:18   作者:  
本文介绍在java中IP地址转换十进制数及把10进制再转换成IP地址的方法及实例参考,晒出来和大家分享一下
先看实例
代码如下
复制代码 代码如下:

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();
}
}

相关文章

  • mybatisplus selectOne查询,有数据,但返回为null问题

    mybatisplus selectOne查询,有数据,但返回为null问题

    这篇文章主要介绍了mybatisplus selectOne查询,有数据,但返回为null问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Java之一文详解String字符串的用法

    Java之一文详解String字符串的用法

    本文将给大家重点讲解一下String的用法,因为这个太常用,也太常考了。String字符串的内容是比较多的,需要初学者进行专门的学习,尤其是它的一些底层原理更需要我们来了解,需要的同学跟着小编一起学习吧
    2023-05-05
  • JAVA 流程控制专项精讲

    JAVA 流程控制专项精讲

    不喜欢罗里吧嗦,讲的很精简易懂。从基础开始讲,后续会讲到JAVA高级,中间会穿插面试题和项目实战,希望能给大家带来帮助
    2022-03-03
  • Mybatis分解式查询使用方法

    Mybatis分解式查询使用方法

    这篇文章主要介绍了Mybatis分解式查询使用方法,分解式查询就是将一条Sql语句拆分成多条。在 MyBatis 多表查询中,使用连接查询时一个 Sql 语句就可以查询出所有的数据
    2023-04-04
  • 一文带你吃透JSP增删改查实战案例详细解读

    一文带你吃透JSP增删改查实战案例详细解读

    这篇文章主要为大家详细介绍了JSP中增删改查实战案例的相关知识,文中的示例代码讲解现象,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2023-03-03
  • java对接微信支付SDK接口简单图文教程

    java对接微信支付SDK接口简单图文教程

    在微信支付接口对接过程中,开发者需准备多项关键参数,如开发者ID(appid)、商户号等,并完成相关注册与认证流程,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-11-11
  • Java利用LocalDate进行日期处理的完全指南

    Java利用LocalDate进行日期处理的完全指南

    这篇文章主要为大家详细介绍了Java利用LocalDate进行日期处理的详细教程,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-03-03
  • 带你了解Java数据结构和算法之数组

    带你了解Java数据结构和算法之数组

    这篇文章主要为大家介绍了Java数据结构和算法之数组,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • IDEA如何修改maven的JVM启动内存参数

    IDEA如何修改maven的JVM启动内存参数

    这篇文章主要介绍了IDEA如何修改maven的JVM启动内存参数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-09-09
  • Java 异常的知识整理

    Java 异常的知识整理

    这篇文章主要介绍了Java 异常的知识整理的相关资料,需要的朋友可以参考下
    2017-07-07

最新评论