1.转换类

import com.google.common.base.Strings;
import java.security.InvalidParameterException;
import java.util.Arrays;
import java.util.regex.Pattern;
import java.util.stream.Collectors; /**
*
*/
public class IpV4Utils {
/**
* ip对应的正则表达式
*/
private static final Pattern IP_PATTERN = Pattern.compile(
"(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}"); /**
* 将ipV4地址转换为对应的int值
* @param ipAddr ip地址(如192.168.12.11)
* @return 转换为int值
*/
public static int toInt(String ipAddr) {
if (Strings.isNullOrEmpty(ipAddr) || !IP_PATTERN.matcher(ipAddr).matches()) {
throw new InvalidParameterException("IP地址不合法");
} byte[] integers = toIntArray(ipAddr); return IntToByteArray.bytesToInt(integers);
} /**
* 将int值转换为对应的ip地址
* @param ipInteger ip地址的int值
* @return 转换为ip地址(如192.168.12.11)
*/
public static String toIpAddress(int ipInteger) {
String[] str = new String[4];
byte[] bytes = IntToByteArray.intToBytes(ipInteger); for (int i = 0; i < bytes.length; i++) {
str[i] = Integer.toString(bytes[i] & 0xFF);
} return Arrays.stream(str).collect(Collectors.joining("."));
} /**
* 将ipV4地址根据点号分割为4部分,每部分用byte表示
* @param ipAddr ipV4地址如 192.168.11.2
* @return 返回[-64,-88,11,2] 因为 java的byte只能表示 -128~127,所以大于127的值被转换为负数
*/
private static byte[] toIntArray(String ipAddr) {
String[] split = ipAddr.split("\\.");
byte[] result = new byte[4]; for (int i = 0; i < split.length; i++) {
result[i] = (byte) (Short.parseShort(split[i]));
} return result;
} public static void main(String[] args) {
String ipAddress = "192.168.12.64";
int ipInt = toInt(ipAddress);
System.out.println(ipAddress + "=" + ipInt); String ipAddress2 = toIpAddress(ipInt);
System.out.println(ipInt + "=" + ipAddress2);
}
}

2.输出如下

192.168.12.64=-1062728640
-1062728640=192.168.12.64

3.辅助类

class IntToByteArray {
public static int bytesToInt(byte[] b) {
return b[3] & 0xFF |
(b[2] & 0xFF) << 8 |
(b[1] & 0xFF) << 16 |
(b[0] & 0xFF) << 24;
} public static byte[] intToBytes(int a) {
return new byte[]{
(byte) ((a >> 24) & 0xFF),
(byte) ((a >> 16) & 0xFF),
(byte) ((a >> 8) & 0xFF),
(byte) (a & 0xFF)
};
}
}

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. JVM 垃圾回收- 转载 知识碎片

    最近关注了一下垃圾回收的问题,想了解一下JVM 关于方法区的垃圾回收机制,找了几篇文章,不同的文章从不同角度讲述了一下,嗯... 拼凑起来 记录一下, 有些未验证正确性... JVM 方法区 当JVM ...

  2. OpenCV的配置

    系统配置:win7 64位系统,编译器 vs2013 一.下载OpenCV安装包(版本2.4.13) https://excellmedia.dl.sourceforge.net/project/op ...

  3. c# Brush、Color、String相互转换

    using System.Windows.Media; 1.String转换成Color Color color = (Color)ColorConverter.ConvertFromString(s ...

  4. Shell编程-04-Shell中变量数值计算

    目录 算术运算符 算术运算命令 数值运算用法 算术运算符     在任何一门形式的语言中均会存在算术运算的情况,Shell常见的运算符如下所示: 运算符 含义 + - * / % 加 减 乘 除 求余 ...

  5. Java Annotation Processors

    Table Of Contents 1. Introduction 2. When to Use Annotation Processors 3. Annotation Processing Unde ...

  6. 解决idea gradle构建Received fatal alert: handshake_failure问题

    Gradle是一款强大的构建工具,但是搭建项目运行环境总是非常头痛,各种网络原因会导致项目不能成功的导入. 说一下这个问题的解决办法,折腾了很久终于解决了. javax.net.ssl.SSLHand ...

  7. [C#]读取指定路径的配置文件[转]

    ExeConfigurationFileMap map = new ExeConfigurationFileMap(); map.ExeConfigFilename = @"C:\App.c ...

  8. [PHP]socket的连接超时 与 读取/写入超时

    socket处理时有两种超时 , 分为连接超时 和 读取/写入数据超时 1. stream_socket_client 函数中的超时时间是连接超时 , 默认是php.ini中的default_sock ...

  9. c3p0--常见异常

    获取资源timeout: 异常信息如下: Caused by: java.sql.SQLException: An attempt by a client to checkout a Connecti ...

  10. DataTables使用总结

    一.使用方法     1.引入JS文件 <script src="js/plugin/datatables/jquery.dataTables.min.js">< ...