如何将二进制字符串转换为 Java 中的十进制字符串

How to convert a binary String to a decimal string in Java

我正在做作业,以为我已经完成了,但老师告诉我这不是他要找的东西,所以我需要知道如何将存储为字符串的二进制数转换为不使用除 length()、charAt()、幂函数和 Java.

中的 floor/ceiling 之外的任何内置函数的十进制字符串

我一开始就是这样的。

import java.util.Scanner;

public class inclass2Fall15Second {
    public static void convertBinaryToDecimalString() {
        Scanner myscnr = new Scanner(System.in);

        int decimal = 0;

        String binary;
        System.out.println("Please enter a binary number: ");
        binary = myscnr.nextLine();
        decimal = Integer.parseInt(binary, 2);
        System.out.println("The decimal number that corresponds to " + binary + " is " + decimal);
    }

    public static void main (String[] args) {
        convertBinaryToDecimalString();
    }
}

要将以 2 为基数(二进制)的表示形式转换为以 10 为基数(十进制),请将每个位的值乘以 2^(位位置)并将值相加。

例如1011 -> (1 * 2^0) + (1 * 2^1) + (0 * 2^2) + (1 * 2^3) = 1 + 2 + 0 + 8 = 11

由于二进制是从右到左读取的(即 LSB(最低有效位)在最右边,MSB(最高有效位)在最左边),我们以相反的顺序遍历字符串.

要获取位值,请从 char 中减去“0”。这将减去 ascii 值为“0”的字符的 ascii 值,得到该位的整数值。

要计算 2^(位位置),我们可以对位位置进行计数,并在每次迭代时递增计数。然后我们可以做 1 << count 来获得 2 ^ (位位置)的值。或者,您也可以执行 Math.pow(2, count),但前者效率更高,因为它只是一个左移指令。

下面是实现上述内容的代码:

public static int convertBinStrToInt(String binStr) {
    int dec = 0, count = 0;
    for (int i = binStr.length()-1; i >=0; i--) {
        dec += (binStr.charAt(i) - '0') * (1 << count++);
    }

    return dec;
}