【进制转换】JAVA自带任意进制间进行相互转换、超长2进制转10进制、进制补零、位运算(2进制-36进制自定义——亲测好用)

  • 先看结果(文末附代码)
    在这里插入图片描述

  • 附代码测试

public class Main2 {
         public static void main(String[] args) {

//------------------------------------------------------------------------------------------------------------------------------------------------------------------
        // 十进制 转 任意进制 最大 36 进制
        String max_36 = Integer.toUnsignedString(1296, 36);

        // 任意进制 转 十进制 最大 36 进制
        int int_36 = Integer.parseUnsignedInt("zz", 36);
//------------------------------------------------------------------------------------------------------------------------------------------------------------------
        /**
         * int 转 String
         */
        int i = 10;
        String custom_36 = Integer.toUnsignedString(i, 36);
        String custom_32 = Integer.toUnsignedString(i, 32);
        String custom_16 = Integer.toUnsignedString(i, 16);

        /*
         * 封装好的方法
         */
        // 十进制 转 十六进制:
        String string = Integer.toHexString(i);
        // 十进制 转 八进制
        String string1 = Integer.toOctalString(i);
        // 十进制 转 二进制
        String string2 = Integer.toBinaryString(i);
        // 十进制 转 36进制
        String integer = Integer.toString(1295, 36);
        // 十进制 转 八进制
        String integer1 = Integer.toUnsignedString(63, 8);
        // 二进制 转 十进制
        String string0101 = Integer.valueOf("0101", 2).toString();
        // 八进制 转 十进制
        String string77 = Integer.valueOf("77", 8).toString();
        // 36进制 转 十进制
        int stringzz = Integer.parseInt("zz", 36);

        /**
         * String 转 int
         */
        // 十进制转成十六进制——十六进制 不可为int
        // 十进制转成八进制——八进制 不可为int
        // 十进制转成二进制——二进制 不可为int
        // 十六进制转成十进制
        int i16 = Integer.parseInt("FF", 16);
        // 八进制转成十进制
        int i8 = Integer.parseUnsignedInt("77", 8);
        // 二进制转十进制
        Integer i2 = Integer.valueOf("10", 2);
        // 自定义进制
        // 27进制转十进制
        int i3 = Integer.parseInt("Kona", 27);
        // 36进制转十进制
        int i4 = Integer.parseUnsignedInt("zz", 36);
        System.out.println();
    }
  • 超长2进制转10进制
    /**
     * 二进制转十进制
     *
     * @param str
     * @return
     */
    public static BigDecimal binaryToString(String str) {
        BigDecimal bigDecimal = new BigDecimal(0);
        char[] chars = str.toCharArray();
        for (int i = chars.length; i > 0; i--) {
            BigDecimal temp = new BigDecimal(1);
            if (chars[i - 1] == '1') {
                for (int j = 0; j < str.toCharArray().length - i; j++) {
                    temp = temp.multiply(new BigDecimal(2));
                }
                bigDecimal = bigDecimal.add(temp);
            }
        }
        return bigDecimal;
    }
  • 进制补零
    /**
     * 左右补0
     *
     * @param str
     * @param strLength
     * @return
     */
    public static String addZeroForNum(String str, int strLength) {
            // 调用jdk方法
        return String.format("%"+strLength+"s", Integer.toBinaryString(Integer.parseInt(str))).replace(' ', '0'); // 仅能左侧添加
//        return StringUtils.leftPad(Integer.toBinaryString(Integer.parseInt(str)), strLength, '0'); // 左侧添加
//        return StringUtils.rightPad(Integer.toBinaryString(Integer.parseInt(str)), strLength, '0');// 右侧添加
    }
    
    // 自己实现
    public static String addZeroForNum(String str, int strLength) {
        int strLen = str.length();
        if (strLen < strLength) {
            while (strLen < strLength) {
                StringBuffer sb = new StringBuffer();
                sb.append("0").append(str);// 左补0
                // sb.append(str).append("0");//右补0
                str = sb.toString();
                strLen = str.length();
            }
        }
        return str;
    }
  • 位运算
  • 以题为例
    在这里插入图片描述
    // 法二: 位运算
    public static void main(String[] args) throws IOException {
         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
         String str = null;
         while ((str = br.readLine()) != null) {
             String[] ip = str.split("\\.");
             long num = Long.parseLong(br.readLine());
             //转10进制
             // 利用按位或运算,|按位或和&按位与计算方式都是转换二进制再计算
             // 左边高位的 ip地址 移位后低位的位置一定为零,所以和未移位的 ip地址 进行或运算一定为低位的数字
             // 如:2.2 -> 00000010.00000010
             // 移位后     0000001000000000|00000010 -> 0000001000000010
             System.out.println(Long.parseLong(ip[0]) << 24 | Long.parseLong(ip[1]) << 16 |
                                Long.parseLong(ip[2]) << 8 | Long.parseLong(ip[3]));
             //转ip地址
             StringBuilder sb = new StringBuilder();
             // 移位后与255做与运算(保证高于此位置的数字和0做与运算),只保留此次位置范围的
             // 如:299867972
             // 移位后-> 17.4575.1171359.299867972
             // 和255与运算后-> 17.223.159.68
             sb.append(String.valueOf((num >> 24) & 255)).append(".").append(String.valueOf((num >> 16) & 255)).append(".").append(String.valueOf((num >> 8) & 255)).append(".").append(String.valueOf(num & 255));
             System.out.println(sb.toString());
         }
     }
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值