zoukankan      html  css  js  c++  java
  • IP地址和int互转

    /**
     * @author: yqq
     * @date: 2019/5/8
     * @description: ip地址与int之间互换
     * https://mp.weixin.qq.com/s?__biz=MzIzMzgxOTQ5NA==&mid=2247486894&idx=1&sn=bf17d404a989c3bb202241326d94647b&chksm=e8fe91a7df8918b1708f0cb759c6f9411d43ac22c257d56cc9191f74dc5eadd666862bb4bd92&scene=0&xtrack=1#rd
     */
    public class IPToString {
        /**
         &:全是1则为1,否则为 0
         |:只要一个为1则为1,否则为0
    
         十进制转成十六进制:
         Integer.toHexString(int i)
         十进制转成八进制
         Integer.toOctalString(int i)
         十进制转成二进制
         Integer.toBinaryString(int i)
         十六进制转成十进制
         Integer.valueOf("FFFF",16).toString()
         八进制转成十进制
         Integer.valueOf("876",8).toString()
         二进制转十进制
         Integer.valueOf("0101",2).toString()
         */
    
        public static void main(String[] args) {
            String[] ips4Test = new String[]{"0.0.0.0", "127.0.0.1",
                    "192.168.1.1", "255.0.0.255", "255.255.255.255"};
            for (String ip : ips4Test) {
                test(ip);
            }
        }
    
        public static void test(String ip) {
            int ipInt = ip2Int(ip);
            String ipString = int2Ip(ipInt);
            System.out.println("用于测试的ip地址: " + ip + ", int表示: " + ipInt + ", 二进制: " + Long.toBinaryString(ipInt)
                    + ", 转回String: " + ipString + ",与测试 ip 地址是否相等: " + ip.equals(ipString));
        }
    
        /**
         * 将 ip 字符串转换为 int 类型的数字
         * <p>
         * 思路就是将 ip 的每一段数字转为 8 位二进制数,并将它们放在结果的适当位置上
         *
         * @param ipString ip字符串,如 127.0.0.1
         * @return ip字符串对应的 int 值
         */
        public static int ip2Int(String ipString) {
            // 取 ip 的各段
            String[] ipSlices = ipString.split("\.");
            int rs = 0;
            for (int i = 0; i < ipSlices.length; i++) {
                // 将 ip 的每一段解析为 int,并根据位置左移 8 位
                int intSlice = Integer.parseInt(ipSlices[i]) << 8 * i;
                // 求与
                rs = rs | intSlice;
            }
            return rs;
        }
    
        /**
         * 将 int 转换为 ip 字符串
         *
         * @param ipInt 用 int 表示的 ip 值
         * @return ip字符串,如 127.0.0.1
         */
        public static String int2Ip(int ipInt) {
            String[] ipString = new String[4];
            for (int i = 0; i < 4; i++) {
                // 每 8 位为一段,这里取当前要处理的最高位的位置
                int pos = i * 8;
                // 取当前处理的 ip 段的值
                int and = ipInt & (255 << pos);
                // 将当前 ip 段转换为 0 ~ 255 的数字,注意这里必须使用无符号右移
                ipString[i] = String.valueOf(and >>> pos);
            }
            return String.join(".", ipString);
        }
    }
  • 相关阅读:
    C# 根据节点索引访问XML配置文件
    C# AE 关于TOCControl
    C# AE 实现点选框选/点击选择要素
    C# AE 合并要素/合并图形/merger功能
    C# AE 对图层筛选要素后显示/只显示符合条件的要素
    css实现垂直水平居中的几种方法
    js中的DOM节点----文本节点
    js中的DOM节点操作---增删改查
    js中的6中继承方式
    js中的原型对象---prototype
  • 原文地址:https://www.cnblogs.com/heqiyoujing/p/11148313.html
Copyright © 2011-2022 走看看