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位整数. 举例:一 ...
随机推荐
- 2016年,你读过的最好的IT技术书有哪几本?
def 程序员 原文 https://www.zhihu.com/question/54350343 陈硕 等 54 人赞同了该回答 1 知乎 陈硕大牛的 服务器多线程编程muduo 输的好不好可能更 ...
- 基于Web Service的客户端框架搭建四:终结篇
前言 这是这个系列的终结篇,前面3个博客介绍了一下内容: 1.使用Http Post方式调用Web Service 2.客户端框架之数据转换层 3.客户端框架之代理层 框架结构 框架是基于C#的,在V ...
- centos7 dubbokeeper安装
下载dubbokeeper源码 git clone https://github.com/dubboclub/dubbokeeper mysql 先执行install-mysql.sh 编译好 ...
- 关于InvokeMethod Activity的异步调用
讨论地址:http://www.cnblogs.com/foundation/archive/2009/12/17/1626617.html 结论是IsCompleted的设置被忽略,看代码里注释 u ...
- [转]TCP的拥塞控制
1.引言 计算机网络中的带宽.交换结点中的缓存和处理机等,都是网络的资源.在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏.这种情况就叫做拥塞. 拥塞控制就是防止 ...
- sql语句语句中的正则查找
举例: select tncl_id from tncl where tncl_id regexp'^0065'; 有一表,数据有10万多条,其中某列数据示例如下: 100000-200000-300 ...
- swift学习之UITabelView ----UITableViewCell
// // OneViewController.swift // tab // // Created by su on 15/12/7. // Copyright © 2015年 tian. ...
- ZOJ2748 Free Kick 2017-04-18 20:40 40人阅读 评论(0) 收藏
Free Kick Time Limit: 2 Seconds Memory Limit: 65536 KB In a soccer game, a direct free kick is ...
- iperf 指令
1. 测试UDP丢包率 30个现成以5Mbps速度测试60s iperf -u -c 目的IP -b 5M -P 30 -t 60 测试TCP丢包率 iperf -c 目的IP -b 5M -P 30 ...
- awk中NF的使用
统计机器中网络连接各个状态个数 netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 一下子不明白$NF是什么意 ...