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

152

我有一个字符串数组,它们表示二进制数字(没有前导零),我想将它们转换为对应的十进制数字。例如:

binary 1011 becomes integer 11
binary 1001 becomes integer 9
binary   11 becomes integer 3   etc. 

有什么最好的方法吗?我一直在探索 java.lang.number.*,但没有找到直接的转换方法。Integer.parseInt(b) 生成与字符串相等的整数...例如,1001 变成了 1,001 而不是 9... 并且似乎没有包含输出基数的参数。 toBinaryString 将转换方向搞错了。 我怀疑我需要进行多步转换,但似乎找不到正确的方法或子类。 我也不确定前导零或缺少前导零会出现什么问题。 有人能给我好的指导吗?


4
请查看Integer#parseInt(String s, int radix)。该方法可以将一个字符串解析为指定进制的整数。 - anubhava
可能是将二进制数转换为十进制数的重复问题。 - Mike Samuel
12个回答

0

现在你想从二进制字符串转换为十进制,但之后,你可能需要相反的方法。下面是它。

public static String decimalToBinaryString(int value) {
    String str = "";
    while(value > 0) {
        if(value % 2 == 1) {
            str = "1"+str;
        } else {
            str = "0"+str;
        }
        value /= 2;
    }
    return str;
}

-1
如果您担心性能问题,Integer.parseInt()Math.pow()的开销太大了。您可以使用位操作来以两倍的速度完成相同的操作(基于我的经验):
final int num = 87;
String biStr = Integer.toBinaryString(num);

System.out.println(" Input Number: " + num + " toBinary "+ biStr);
int dec = binaryStringToDecimal(biStr);
System.out.println("Output Number: " + dec + " toBinary "+Integer.toBinaryString(dec));

哪里

int binaryStringToDecimal(String biString){
  int n = biString.length();      
  int decimal = 0;
  for (int d = 0; d < n; d++){
    // append a bit=0 (i.e. shift left) 
    decimal = decimal << 1;

    // if biStr[d] is 1, flip last added bit=0 to 1 
    if (biString.charAt(d) == '1'){
      decimal = decimal | 1; // e.g. dec = 110 | (00)1 = 111
    }
  }
  return decimal;
}

输出:

 Input Number: 87 toBinary 1010111
Output Number: 87 toBinary 1010111

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接