1.转换类

  1. import com.google.common.base.Strings;
  2. import java.security.InvalidParameterException;
  3. import java.util.Arrays;
  4. import java.util.regex.Pattern;
  5. import java.util.stream.Collectors;
  6.  
  7. /**
  8. *
  9. */
  10. public class IpV4Utils {
  11. /**
  12. * ip对应的正则表达式
  13. */
  14. private static final Pattern IP_PATTERN = Pattern.compile(
  15. "(2(5[0-5]{1}|[0-4]\\d{1})|[0-1]?\\d{1,2})(\\.(2(5[0-5]{1}|[0-4]\\d{1})|[0-1]?\\d{1,2})){3}");
  16.  
  17. /**
  18. * 将ipV4地址转换为对应的int值
  19. * @param ipAddr ip地址(如192.168.12.11)
  20. * @return 转换为int值
  21. */
  22. public static int toInt(String ipAddr) {
  23. if (Strings.isNullOrEmpty(ipAddr) || !IP_PATTERN.matcher(ipAddr).matches()) {
  24. throw new InvalidParameterException("IP地址不合法");
  25. }
  26.  
  27. byte[] integers = toIntArray(ipAddr);
  28.  
  29. return IntToByteArray.bytesToInt(integers);
  30. }
  31.  
  32. /**
  33. * 将int值转换为对应的ip地址
  34. * @param ipInteger ip地址的int值
  35. * @return 转换为ip地址(如192.168.12.11)
  36. */
  37. public static String toIpAddress(int ipInteger) {
  38. String[] str = new String[4];
  39. byte[] bytes = IntToByteArray.intToBytes(ipInteger);
  40.  
  41. for (int i = 0; i < bytes.length; i++) {
  42. str[i] = Integer.toString(bytes[i] & 0xFF);
  43. }
  44.  
  45. return Arrays.stream(str).collect(Collectors.joining("."));
  46. }
  47.  
  48. /**
  49. * 将ipV4地址根据点号分割为4部分,每部分用byte表示
  50. * @param ipAddr ipV4地址如 192.168.11.2
  51. * @return 返回[-64,-88,11,2] 因为 java的byte只能表示 -128~127,所以大于127的值被转换为负数
  52. */
  53. private static byte[] toIntArray(String ipAddr) {
  54. String[] split = ipAddr.split("\\.");
  55. byte[] result = new byte[4];
  56.  
  57. for (int i = 0; i < split.length; i++) {
  58. result[i] = (byte) (Short.parseShort(split[i]));
  59. }
  60.  
  61. return result;
  62. }
  63.  
  64. public static void main(String[] args) {
  65. String ipAddress = "192.168.12.64";
  66. int ipInt = toInt(ipAddress);
  67. System.out.println(ipAddress + "=" + ipInt);
  68.  
  69. String ipAddress2 = toIpAddress(ipInt);
  70. System.out.println(ipInt + "=" + ipAddress2);
  71. }
  72. }

2.输出如下

  1. 192.168.12.64=-1062728640
  2. -1062728640=192.168.12.64

3.辅助类

  1. class IntToByteArray {
  2. public static int bytesToInt(byte[] b) {
  3. return b[3] & 0xFF |
  4. (b[2] & 0xFF) << 8 |
  5. (b[1] & 0xFF) << 16 |
  6. (b[0] & 0xFF) << 24;
  7. }
  8.  
  9. public static byte[] intToBytes(int a) {
  10. return new byte[]{
  11. (byte) ((a >> 24) & 0xFF),
  12. (byte) ((a >> 16) & 0xFF),
  13. (byte) ((a >> 8) & 0xFF),
  14. (byte) (a & 0xFF)
  15. };
  16. }
  17. }

IP地址转换为Int的更多相关文章

  1. IP地址和int互转

    /** * @author: yqq * @date: 2019/5/8 * @description: ip地址与int之间互换 * https://mp.weixin.qq.com/s?__biz ...

  2. python实现IP地址转换为32位二进制

    python实现IP地址转换为32位二进制 #!/usr/bin/env python # -*- coding:utf-8 -*- class IpAddrConverter(object): de ...

  3. IP地址在mysql的存储(IP地址和int的转换)

    PHP echo ip2long('192.168.1.38'); 输出:3232235814 MYSQL SELECT INET_ATON('192.168.1.38'); 输出:323223581 ...

  4. 【mysql】IP地址整数int和varchar的转换

    mysql中IP地址的存储 IP:如192.168.12.145,在存储时,若是采用varchar进行存储,存在两个主要缺点: 存储空间占用较大: 查询检索较慢: 解决方式: 存储时:将字符串类型的I ...

  5. C#中IP地址转换为数值的方法

    任何语言都通用的方法转换 IP 地址 a.b.c.d ==> a***+b**+c*+d ===> *(c+*(b+*a)) +d 示例: ***+**+*+ ===> *( +*( ...

  6. python模块--ip地址转换为整数

    python整数与IP地址转换 [转] 我们有时会将一个整数与IP地址进行互换,用python代码实现很简单 将一个整数如2000000,变为一个IP地址的方式 >>> import ...

  7. DWORD类型的IP地址转换为CString字符串

    从ip地址控件获得的ip地址是DWORD类型的 用MessageBox怎样将ip地址显示出来呢? DWORD类型32位,每4位为一组代表常见的IP地址,即***.***.***.***. 采用HIWO ...

  8. python实现将IP地址转换为数字

    话不多说,直接代码 ip_addr='192.168.2.10' # transfer ip to int def ip2long(ip): ip_list=ip.split('.') result= ...

  9. C# IP地址与整数之间的转换

    IP地址与整数之间的转换 1.IP地址转换为整数 原理:IP地址每段可以看成是8位无符号整数即0-255,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个无符号的32位整数. 举例:一 ...

随机推荐

  1. RocketMQ:Cannot allocate memory

    使用Storm本地模式消费RocketMQ数据的时候, 消费一点数据之后,就会出现如下错误: Java HotSpot(TM) 64-Bit Server VM warning: INFO: os:: ...

  2. (网络流)Food -- hdu -- 4292

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=4292 Food Time Limit: 2000/1000 MS (Java/Others)    Me ...

  3. VS中的Debug 和 Release 编译方式的本质区别

    VS中的Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使 ...

  4. polymer入门例子-已过时

    这个教程挺不错!:http://blog.csdn.net/renfufei/article/details/37040883 过时了,现在的版本已经为1.0了 一:创建APP结构 本教程会使用预先构 ...

  5. 7、Docker Container

    7.1 什么是Container 通过image创建(copy) 在Image layer之上建立一个Container layer(可读写) 类比面向对象:类和实例 Image负责APP的存储和分发 ...

  6. java程序练习

    数组求和作业 开发环境:java 工具:eclipse 两种数据类型excel和csv 在同学建议下,我选择用csv文件打开,这就引来了第一个问题,在java中如何调用csv文件.以下是我百度的结果 ...

  7. tomcat-java_opts设置说明

    The JAVA_OPTS environment variable can be used to specify additional arguments to the JVM JBoss will ...

  8. Xshell传输文件

    用rz,sz命令在xshell传输文件 很好用,然后有时候想在windows和linux上传或下载某个文件,其实有个很简单的方法就是rz,sz 首先你的Ubuntu需要安装rz.sz(如果没有安装请执 ...

  9. 去掉easyui tree 的默认图标

    $(".tree-icon,.tree-file").removeClass("tree-icon tree-file"); $(".tree-ico ...

  10. win10 数字许可证激活被 KMS激活覆盖

    打开cmd(管理员身份),依次执行以下命令: slmgr/upk slmgr/ckms slmgr/rearm 重启设备后联网登录Microsoft账号,转设置-激活-疑难解答,windows会找到与 ...