Java编程IP地址和数字相互转换代码示例

 更新时间:2017年11月30日 10:24:39   作者:Lena-Yang  
这篇文章主要介绍了Java编程IP地址和数字相互转换代码示例,具有一定借鉴价值,需要的朋友可以参考下。

最近才知道,将ip地址转换成十进制、八进制、十六进制同样可以访问网站。

IP转为数字(第二种算法。用左移、按位或实现。效率更高。):

public long ipToLong(String ipAddress) { 
 
long result = 0; 
 
String[] ipAddressInArray = ipAddress.split("\\."); 
 
for (int i = 3; i >= 0; i--) { 
 
  long ip = Long.parseLong(ipAddressInArray[3 - i]); 
 
  //left shifting 24,16,8,0 and bitwise OR 
 
  //1. 192 << 24 
  //1. 168 << 16 
  //1. 1  << 8 
  //1. 2  << 0 
  result |= ip << (i * 8); 
 
} 
return result; 
 } 

数字转为IP,两种算法都差不多:

//ip = 3232235778 
 public String longToIp(long ip) { 
StringBuilder result = new StringBuilder(15); 
 
for (int i = 0; i < 4; i++) { 
 
  result.insert(0,Long.toString(ip & 0xff)); 
 
  if (i < 3) { 
    result.insert(0,'.'); 
  } 
 
  ip = ip >> 8; 
} 
return result.toString(); 
 } 
 
 //ip = 3232235778 
 public String longToIp2(long ip) { 
 
return ((ip >> 24) & 0xFF) + "."  
  + ((ip >> 16) & 0xFF) + "."  
  + ((ip >> 8) & 0xFF) + "."  
  + (ip & 0xFF); 
 } 

完整代码:

public class JavaBitwiseExample { 
  
  public static void main(String[] args) { 
  
    JavaBitwiseExample obj = new JavaBitwiseExample(); 
  
    System.out.println("iptoLong : " + obj.ipToLong("192.168.1.2")); 
    System.out.println("iptoLong2 : " + obj.ipToLong2("192.168.1.2")); 
  
    System.out.println("longToIp : " + obj.longToIp(3232235778L)); 
    System.out.println("longToIp2 : " + obj.longToIp2(3232235778L)); 
  
  } 
  
  // example : 192.168.1.2 
  public long ipToLong(String ipAddress) { 
  
    // ipAddressInArray[0] = 192 
    String[] ipAddressInArray = ipAddress.split("\\."); 
  
    long result = 0; 
    for (int i = 0; i < ipAddressInArray.length; i++) { 
  
      int power = 3 - i; 
      int ip = Integer.parseInt(ipAddressInArray[i]); 
  
      // 1. 192 * 256^3 
      // 2. 168 * 256^2 
      // 3. 1 * 256^1 
      // 4. 2 * 256^0 
      result += ip * Math.pow(256, power); 
  
    } 
  
    return result; 
  
  } 
  
  public long ipToLong2(String ipAddress) { 
  
    long result = 0; 
  
    String[] ipAddressInArray = ipAddress.split("\\."); 
  
    for (int i = 3; i >= 0; i--) { 
  
      long ip = Long.parseLong(ipAddressInArray[3 - i]); 
  
      // left shifting 24,16,8,0 and bitwise OR 
  
      // 1. 192 << 24 
      // 1. 168 << 16 
      // 1. 1 << 8 
      // 1. 2 << 0 
      result |= ip << (i * 8); 
  
    } 
  
    return result; 
  } 
  
  public String longToIp(long i) { 
  
    return ((i >> 24) & 0xFF) +  
          "." + ((i >> 16) & 0xFF) +  
          "." + ((i >> 8) & 0xFF) +  
          "." + (i & 0xFF); 
  
  } 
  
  public String longToIp2(long ip) { 
    StringBuilder sb = new StringBuilder(15); 
  
    for (int i = 0; i < 4; i++) { 
  
      // 1. 2 
      // 2. 1 
      // 3. 168 
      // 4. 192 
      sb.insert(0, Long.toString(ip & 0xff)); 
  
      if (i < 3) { 
        sb.insert(0, '.'); 
      } 
  
      // 1. 192.168.1.2 
      // 2. 192.168.1 
      // 3. 192.168 
      // 4. 192 
      ip = ip >> 8; 
  
    } 
  
    return sb.toString(); 
  } 
} 

总结

以上就是本文关于Java编程IP地址和数字相互转换代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出!

相关文章

  • Springboot单体架构http请求转换https请求来支持微信小程序调用接口

    Springboot单体架构http请求转换https请求来支持微信小程序调用接口

    这篇文章主要介绍了Springboot单体架构http请求转换https请求来支持微信小程序调用接口,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • SpringBoot如何访问html和js等静态资源配置

    SpringBoot如何访问html和js等静态资源配置

    这篇文章主要介绍了SpringBoot如何访问html和js等静态资源配置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Spring使用RestTemplate模拟form提交示例

    Spring使用RestTemplate模拟form提交示例

    本篇文章主要介绍了Spring使用RestTemplate模拟form提交示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Java中Lombok @Value注解导致的variable not been initialized问题

    Java中Lombok @Value注解导致的variable not been initialized问题

    本文主要介绍了Java中Lombok @Value注解导致的variable not been initialized问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • java异常处理拦截器详情

    java异常处理拦截器详情

    这篇文章主要介绍了java异常处理拦截器,使用异常处理拦截器,可以不用写那么多try…catch…,下面就来学习关于java异常处理拦截器的详情内容吧,需要的朋友可以参考一下
    2021-10-10
  • Mybatis-plus中QueryWrapper的多种用法小结

    Mybatis-plus中QueryWrapper的多种用法小结

    本文主要介绍了Mybatis-plus中QueryWrapper的多种用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • SpringBoot如何整合mybatis-generator-maven-plugin 1.4.0

    SpringBoot如何整合mybatis-generator-maven-plugin 1.4.0

    这篇文章主要介绍了SpringBoot整合mybatis-generator-maven-plugin 1.4.0的实现方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-01-01
  • Mybatis-plus设置某个字段值为null的方法总结

    Mybatis-plus设置某个字段值为null的方法总结

    mybatis-plus以下简称mp,目前应该也算是主流的一款数据访问层应用框架,下面这篇文章主要给大家介绍了关于Mybatis-plus设置某个字段值为null的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Java优化重复冗余代码的8种方式总结

    Java优化重复冗余代码的8种方式总结

    日常开发中,我们经常会遇到一些重复代码,最近小编优化了一些系统中的重复代码,用了好几种的方式,感觉挺有用的,所以本文给大家讲讲优化重复代码的几种方式
    2023-08-08
  • java 使用poi 导入Excel数据到数据库的步骤

    java 使用poi 导入Excel数据到数据库的步骤

    这篇文章主要介绍了java 使用poi 导入Excel 数据到数据库的步骤,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-12-12

最新评论