如何在Java中将二进制字符串转换为基数10整数

dww*_*n66 91 java string binary radix

我有一个字符串数组,表示我想要转换为相应的基数为10的二进制数字(没有前导零).考虑:

binary 1011 becomes integer 11
binary 1001 becomes integer 9
binary   11 becomes integer 3   etc. 
Run Code Online (Sandbox Code Playgroud)

什么是最好的方法?我一直在探索java.lang.number.*而没有找到直接的转换方法.Integer.parseInt(b)产生一个整数EQUAL到String ...例如,1001变为1,001而不是9 ...并且似乎不包括输出基数的参数.toBinaryString转换方向是否错误.我怀疑我需要进行多步转换,但似乎无法找到正确的方法或子类组合.我也不确定领先零或缺少零的程度是一个问题.有人有什么好的指示指点我吗?

Mat*_*all 231

您需要指定基数.有一个超载Integer#parseInt()允许你.

int foo = Integer.parseInt("1001", 2);
Run Code Online (Sandbox Code Playgroud)

  • 完美。我完全错过了 parseInt 文档中允许基数的第二行。工作起来就像做梦一样。 (2认同)

Has*_*san 16

这可能有效:

public int binaryToInteger(String binary) {
    char[] numbers = binary.toCharArray();
    int result = 0;
    for(int i=numbers.length - 1; i>=0; i--)
        if(numbers[i]=='1')
            result += Math.pow(2, (numbers.length-i - 1));
    return result;
}
Run Code Online (Sandbox Code Playgroud)

  • -1用于不必要地重新发明轮子. (11认同)
  • 这个对我有帮助,因为我必须在没有使用java已经拥有的转换的情况下进行转换 (6认同)

txc*_*der 6

int foo = Integer.parseInt("1001", 2);
Run Code Online (Sandbox Code Playgroud)

如果你正在处理正数而工作正常,但如果你需要处理有符号数字,你可能需要签名扩展你的字符串然后转换为Int

public class bit_fun {
    public static void main(String[] args) {
        int x= (int)Long.parseLong("FFFFFFFF", 16);
        System.out.println("x =" +x);       

        System.out.println(signExtend("1"));
        x= (int)Long.parseLong(signExtend("1"), 2);
        System.out.println("x =" +x);

        System.out.println(signExtend("0"));
        x= (int)Long.parseLong(signExtend("0"), 2);
        System.out.println("x =" +x);

        System.out.println(signExtend("1000"));
        x= (int)Long.parseLong(signExtend("1000"), 2);
        System.out.println("x =" +x);

        System.out.println(signExtend("01000"));
        x= (int)Long.parseLong(signExtend("01000"), 2);
        System.out.println("x =" +x);
    }

    private static String signExtend(String str){
        //TODO add bounds checking
        int n=32-str.length();
        char[] sign_ext = new char[n];
        Arrays.fill(sign_ext, str.charAt(0));

        return new String(sign_ext)+str;
    }
}

output:
x =-1
11111111111111111111111111111111
x =-1
00000000000000000000000000000000
x =0
11111111111111111111111111111000
x =-8
00000000000000000000000000001000
x =8 
Run Code Online (Sandbox Code Playgroud)

我希望有所帮助!


小智 5

static int binaryToInt (String binary){
    char []cA = binary.toCharArray();
    int result = 0;
    for (int i = cA.length-1;i>=0;i--){
        //111 , length = 3, i = 2, 2^(3-3) + 2^(3-2)
        //                    0           1  
        if(cA[i]=='1') result+=Math.pow(2, cA.length-i-1);
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)