二进制与十进制转换工具类

Posted xiejn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二进制与十进制转换工具类相关的知识,希望对你有一定的参考价值。

package util;

/**
 * 二进制工具类
 * 
 * @author 谢辉
 * @time 2020.07.01
 *
 */
public class BinaryUtil {
    /**
     * 十进制数字转二进制
     * 
     * @param num       十进制数字
     * @param strResult 结果容器,追加结果用,
     * @return 返回结果字符串
     */
    public static String DecimalToBinary(Integer num, StringBuilder strResult) {
        num = num < 0 ? 0 : num;
        Integer integer = num / 2;// 整除结果
        Integer StrInteger = num % 2;// 取余结果
        if (integer == 0) {// 表示1/2=0;商为0,不能再往下除了
            strResult.append(StrInteger);
        } else {
            // 递归追加结果
            strResult.append(StrInteger);
            DecimalToBinary(integer, strResult);
        }
        return new StringBuilder(strResult.toString()).reverse().toString();
    }

    /**
     * 二进制转换十进制
     * 
     * @param binary 二进制字符串
     * @return 转换的结果
     * @throws NumberFormatException
     */
    public static Integer BinaryToDecimal(String binary) throws NumberFormatException {
        char[] array = binary.toCharArray();
        // 对传入的二进制字符串检测
        for (int i = 0; i < array.length; i++) {
            if (array[i] != ‘0‘ && array[i] != ‘1‘) {
                throw new NumberFormatException("二进制只能有0或1!");
            }
        }
        // 再次检测字符串,避免‘00010101’,转成‘10101’
        int index = binary.indexOf("1") > 0 ? binary.indexOf("1") : 0;
        binary = array[0] == ‘0‘ ? binary.substring(index) : binary;
        // 规范二进制字符串后,开始计算结果
        return compute(binary);
    }

    private static Integer compute(String binaryNum) {
        Integer decimalNum = 0;
        int parseInt = Integer.parseInt(binaryNum);
        if (parseInt == 1) {
            return 1;
        } else if (parseInt <= 0) {
            return 0;
        } else {
            char[] binaryArr = binaryNum.toCharArray();
            decimalNum = binaryArr[1] == ‘0‘ ? 2 : 3;
            for (int i = 2; i < binaryArr.length; i++) {
                decimalNum = binaryArr[i] == ‘0‘ ? decimalNum * 2 : decimalNum * 2 + 1;
            }
            return decimalNum;
        }
    }

    /**
     * 测试功能
     * 
     * @param args
     */
    public static void main(String[] args) {
        int num = 33;
        String string = DecimalToBinary(num, new StringBuilder());
        System.out.println(num + "的二进制结果:" + string);

        Integer binaryToDecimal = BinaryToDecimal(string);
        System.out.println(string + "的十进制结果:" + binaryToDecimal);
    }

}

 

以上是关于二进制与十进制转换工具类的主要内容,如果未能解决你的问题,请参考以下文章

ColorUtilColor工具类(color整型rgb数组16进制互相转换)

Java中将字符串与unicode的相互转换工具类

c_cpp C片段将十进制转换为二进制

Silverlight 中的十进制转换器无法正确处理丢失焦点

android.view.InflateException:二进制 XML 文件第 15 行:二进制 XML 文件第 19 行:膨胀类片段时出错

RGB颜色值与十六进制颜色码转换工具