IP地址转换为Int
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的更多相关文章
- IP地址和int互转
/** * @author: yqq * @date: 2019/5/8 * @description: ip地址与int之间互换 * https://mp.weixin.qq.com/s?__biz ...
- python实现IP地址转换为32位二进制
python实现IP地址转换为32位二进制 #!/usr/bin/env python # -*- coding:utf-8 -*- class IpAddrConverter(object): de ...
- IP地址在mysql的存储(IP地址和int的转换)
PHP echo ip2long('192.168.1.38'); 输出:3232235814 MYSQL SELECT INET_ATON('192.168.1.38'); 输出:323223581 ...
- 【mysql】IP地址整数int和varchar的转换
mysql中IP地址的存储 IP:如192.168.12.145,在存储时,若是采用varchar进行存储,存在两个主要缺点: 存储空间占用较大: 查询检索较慢: 解决方式: 存储时:将字符串类型的I ...
- C#中IP地址转换为数值的方法
任何语言都通用的方法转换 IP 地址 a.b.c.d ==> a***+b**+c*+d ===> *(c+*(b+*a)) +d 示例: ***+**+*+ ===> *( +*( ...
- python模块--ip地址转换为整数
python整数与IP地址转换 [转] 我们有时会将一个整数与IP地址进行互换,用python代码实现很简单 将一个整数如2000000,变为一个IP地址的方式 >>> import ...
- DWORD类型的IP地址转换为CString字符串
从ip地址控件获得的ip地址是DWORD类型的 用MessageBox怎样将ip地址显示出来呢? DWORD类型32位,每4位为一组代表常见的IP地址,即***.***.***.***. 采用HIWO ...
- python实现将IP地址转换为数字
话不多说,直接代码 ip_addr='192.168.2.10' # transfer ip to int def ip2long(ip): ip_list=ip.split('.') result= ...
- C# IP地址与整数之间的转换
IP地址与整数之间的转换 1.IP地址转换为整数 原理:IP地址每段可以看成是8位无符号整数即0-255,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个无符号的32位整数. 举例:一 ...
随机推荐
- RocketMQ:Cannot allocate memory
使用Storm本地模式消费RocketMQ数据的时候, 消费一点数据之后,就会出现如下错误: Java HotSpot(TM) 64-Bit Server VM warning: INFO: os:: ...
- (网络流)Food -- hdu -- 4292
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4292 Food Time Limit: 2000/1000 MS (Java/Others) Me ...
- VS中的Debug 和 Release 编译方式的本质区别
VS中的Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使 ...
- polymer入门例子-已过时
这个教程挺不错!:http://blog.csdn.net/renfufei/article/details/37040883 过时了,现在的版本已经为1.0了 一:创建APP结构 本教程会使用预先构 ...
- 7、Docker Container
7.1 什么是Container 通过image创建(copy) 在Image layer之上建立一个Container layer(可读写) 类比面向对象:类和实例 Image负责APP的存储和分发 ...
- java程序练习
数组求和作业 开发环境:java 工具:eclipse 两种数据类型excel和csv 在同学建议下,我选择用csv文件打开,这就引来了第一个问题,在java中如何调用csv文件.以下是我百度的结果 ...
- tomcat-java_opts设置说明
The JAVA_OPTS environment variable can be used to specify additional arguments to the JVM JBoss will ...
- Xshell传输文件
用rz,sz命令在xshell传输文件 很好用,然后有时候想在windows和linux上传或下载某个文件,其实有个很简单的方法就是rz,sz 首先你的Ubuntu需要安装rz.sz(如果没有安装请执 ...
- 去掉easyui tree 的默认图标
$(".tree-icon,.tree-file").removeClass("tree-icon tree-file"); $(".tree-ico ...
- win10 数字许可证激活被 KMS激活覆盖
打开cmd(管理员身份),依次执行以下命令: slmgr/upk slmgr/ckms slmgr/rearm 重启设备后联网登录Microsoft账号,转设置-激活-疑难解答,windows会找到与 ...