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);
        }
    }
  • 相关阅读:
    程序员的7中武器
    需要强化的知识
    微软中国联合小i推出MSN群Beta 不需任何插件
    XML Notepad 2006 v2.0
    Sandcastle August 2006 Community Technology Preview
    [推荐] TechNet 广播 SQL Server 2000完结篇
    《太空帝国 4》(Space Empires IV)以及 xxMod 英文版 中文版 TDM Mod 英文版 中文版
    IronPython 1.0 RC2 更新 1.0.60816
    Microsoft .NET Framework 3.0 RC1
    《Oracle Developer Suite 10g》(Oracle Developer Suite 10g)V10.1.2.0.2
  • 原文地址:https://www.cnblogs.com/heqiyoujing/p/11148313.html
Copyright © 2011-2022 走看看