1. /**
  2. * @author: yqq
  3. * @date: 2019/5/8
  4. * @description: ip地址与int之间互换
  5. * https://mp.weixin.qq.com/s?__biz=MzIzMzgxOTQ5NA==&mid=2247486894&idx=1&sn=bf17d404a989c3bb202241326d94647b&chksm=e8fe91a7df8918b1708f0cb759c6f9411d43ac22c257d56cc9191f74dc5eadd666862bb4bd92&scene=0&xtrack=1#rd
  6. */
  7. public class IPToString {
  8. /**
  9. &:全是1则为1,否则为 0
  10. |:只要一个为1则为1,否则为0
  11.  
  12. 十进制转成十六进制:
  13. Integer.toHexString(int i)
  14. 十进制转成八进制
  15. Integer.toOctalString(int i)
  16. 十进制转成二进制
  17. Integer.toBinaryString(int i)
  18. 十六进制转成十进制
  19. Integer.valueOf("FFFF",16).toString()
  20. 八进制转成十进制
  21. Integer.valueOf("876",8).toString()
  22. 二进制转十进制
  23. Integer.valueOf("0101",2).toString()
  24. */
  25.  
  26. public static void main(String[] args) {
  27. String[] ips4Test = new String[]{"0.0.0.0", "127.0.0.1",
  28. "192.168.1.1", "255.0.0.255", "255.255.255.255"};
  29. for (String ip : ips4Test) {
  30. test(ip);
  31. }
  32. }
  33.  
  34. public static void test(String ip) {
  35. int ipInt = ip2Int(ip);
  36. String ipString = int2Ip(ipInt);
  37. System.out.println("用于测试的ip地址: " + ip + ", int表示: " + ipInt + ", 二进制: " + Long.toBinaryString(ipInt)
  38. + ", 转回String: " + ipString + ",与测试 ip 地址是否相等: " + ip.equals(ipString));
  39. }
  40.  
  41. /**
  42. * 将 ip 字符串转换为 int 类型的数字
  43. * <p>
  44. * 思路就是将 ip 的每一段数字转为 8 位二进制数,并将它们放在结果的适当位置上
  45. *
  46. * @param ipString ip字符串,如 127.0.0.1
  47. * @return ip字符串对应的 int 值
  48. */
  49. public static int ip2Int(String ipString) {
  50. // 取 ip 的各段
  51. String[] ipSlices = ipString.split("\\.");
  52. int rs = 0;
  53. for (int i = 0; i < ipSlices.length; i++) {
  54. // 将 ip 的每一段解析为 int,并根据位置左移 8 位
  55. int intSlice = Integer.parseInt(ipSlices[i]) << 8 * i;
  56. // 求与
  57. rs = rs | intSlice;
  58. }
  59. return rs;
  60. }
  61.  
  62. /**
  63. * 将 int 转换为 ip 字符串
  64. *
  65. * @param ipInt 用 int 表示的 ip 值
  66. * @return ip字符串,如 127.0.0.1
  67. */
  68. public static String int2Ip(int ipInt) {
  69. String[] ipString = new String[4];
  70. for (int i = 0; i < 4; i++) {
  71. // 每 8 位为一段,这里取当前要处理的最高位的位置
  72. int pos = i * 8;
  73. // 取当前处理的 ip 段的值
  74. int and = ipInt & (255 << pos);
  75. // 将当前 ip 段转换为 0 ~ 255 的数字,注意这里必须使用无符号右移
  76. ipString[i] = String.valueOf(and >>> pos);
  77. }
  78. return String.join(".", ipString);
  79. }
  80. }

IP地址和int互转的更多相关文章

  1. IP地址转换为Int

    1.转换类 import com.google.common.base.Strings; import java.security.InvalidParameterException; import ...

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

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

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

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

  4. windows下获取IP地址的两种方法

    windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...

  5. 批处理快速更改ip地址

    在各种网络中切换,windows更换ip地址步骤:  进入控制面板--网络和internet--网络和共享中心--理性适配器设置--然后找到网卡--进入属性--然后internet 协议--更改ip信 ...

  6. C#根据IP地址和子网掩码计算广播地址

    using System.Net; /// <summary> /// 获得广播地址 /// </summary> /// <param name="ipAdd ...

  7. C#获取局域网中的所有正在使用的IP地址

    方法不是很好. using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  8. IP地址在数据库里面的存储方式

    大多数公司的表结构都需要经过DBA进行审核,有时候你会看到存储IP地址采用varchar(15),这种方式都是传统的做法,这种方法需要占用15个字节,那么有更省空间的做法么?肯定是有的,那就是用int ...

  9. IP地址的存储和使用

    ip地址使用int类型存储,用INET_NTOA()和INET_ATON()转换 mysql'),inet_aton('127.0.0.1'); +-------------------------+ ...

随机推荐

  1. 通过jmeter发送webservice接口请求

    1.webservice接口地址:http://ip:port/...?wsdl 2.接口数据类型:<cuxGmiChukuRmaTrxV><salesrepId xmlns:xsi ...

  2. 消息中间件-activemq安全机制

    activemq作为消息中间件这样一个独立的个体存在,连通用户和服务器.如果没有一套完备的安全机制去设置用户权限设置消息分发机制可想后果是非常严重.ActiveMQ如果不加入安全机制的话,任何人只要知 ...

  3. Java——类型信息

    1.Class对象 Class对象是一个特殊的对象,它包含了与类有关的信息.Class对象就是用来创建类的所有常规对象的. 类是程序的一部分,每个类都有一个Class对象,每当编写并且编译一个新类,就 ...

  4. 【CodeForces - 1200A】Hotelier(水题、模拟)

    Hotelier 直接翻译了 Descriptions Amugae的酒店由10人组成10客房.房间从0开始编号0到99 从左到右. 酒店有两个入口 - 一个来自左端,另一个来自右端.当顾客通过左入口 ...

  5. 浅谈IDEA集成SSM框架(SpringMVC+Spring+MyBatis)

    前言 学习完MyBatis,Spring,SpringMVC之后,我们需要做的就是将这三者联系起来,Spring实现业务对象管理,Spring MVC负责请求的转发和视图管理, MyBatis作为数据 ...

  6. 浅谈Http与Https

    大家都知道,在客户端与服务器数据传输的过程中,http协议的传输是不安全的,也就是一般情况下http是明文传输的.但https协议的数据传输是安全的,也就是说https数据的传输是经过加密. 在客户端 ...

  7. 记基于docker+gunicorn部署sanic项目遇到的很多很多坑

    前言: 最近有个项目需要上线,是python中sanic网络异步框架写的,并且要求使用docker+nginx来部署项目实现负载均衡,于是乎百度了sanic项目部署,基本上都是基于docker+gun ...

  8. Nacos(六):多环境下如何“管理”及“隔离”配置和服务

    前言 前景回顾: Nacos(五):多环境下如何"读取"Nacos中相应环境的配置 Nacos(四):SpringCloud项目中接入Nacos作为配置中心 现如今,在微服务体系中 ...

  9. Linux 用户和组 权限管理 常用命令与参数

    ========================================================================== 1.基本概念: 所有者 : 一般为文件的创建者,谁 ...

  10. python 19 包

    目录 1. 包 2. logging 日志 2.1 日志级别 2.2 配置日志格式: 2.3 logger 对象配置 1. 包 文件夹下具有__init__.py文件就是一个包 from bake.c ...