• 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);
        }
    }
  • 相关阅读:
    Android——ArrayList 、LinkList、List 区别 & 迭代器iterator的使用 & HashMap、Hashtable、LinkedHashMap、TreeMap
    Android--List与ArrayList区别(转)
    android——inflater 用法(转)
    Android——列表视图 ListView(二)SimpleAdapter
    Odoo 仓库扫码打包方案
    Odoo 仓库调拨移动过程中 单位不允许错误的分析及解决方案
    Ubuntu FTP 配置
    attrs 中的 uid
    GitLab安装手记
    [转载]How To Add Swap on Ubuntu 12.04
  • 原文地址:https://www.cnblogs.com/heqiyoujing/p/11148313.html
Copyright © 2020-2023  润新知