如何将二进制字符串值转换为十进制

41

如何将二进制字符串转换为

String c = "110010"; // as binary

如何在Java中将十六进制转换为十进制?(示例中期望的结果为50)


请不要提出你没有尝试过解决的问题。[询问] - Moog
16个回答

102

使用Integer.parseInt(请参见javadoc),它将您的String转换为使用二进制的int

int decimalValue = Integer.parseInt(c, 2);

如果c的值太长怎么办? - inquisitive

18
public static int integerfrmbinary(String str){
    double j=0;
    for(int i=0;i<str.length();i++){
        if(str.charAt(i)== '1'){
         j=j+ Math.pow(2,str.length()-1-i);
     }

    }
    return (int) j;
}

这段代码是我手写的。你也可以像上面提到的那样使用parseInt。 该函数将给出与二进制字符串对应的十进制值:)


13

我认为你正在寻找 Integer.parseInt。第二个参数接受一个基数,此处为2。

Integer.parseInt(c, 2)

6
int i = Integer.parseInt(c, 2);

3
int num = Integer.parseInt("binaryString",2);

这个解决方案在这个答案发布之前已经多次提供过了好几年。 - undefined

2

在考虑小数精度时,必须限制位串长度。无论如何,使用BigDecimal是一个不错的选择。

public BigDecimal bitStringToBigDecimal(String bitStr){

    BigDecimal sum = new BigDecimal("0");
    BigDecimal base = new BigDecimal(2);
    BigDecimal temp;
    for(int i=0;i<bitStr.length();i++){
        if(bitStr.charAt(i)== '1'){
            int exponent= bitStr.length()-1-i;
            temp=base.pow(exponent);
            sum=sum.add(temp);
        }

    }
    return sum;
}

你可以测试一下:str="10000101001001000010111100100110000000000000000000001010111101"; - json.wei

2
public static Long binToDec(String bin) {
long dec = 0L;
    long pow = 1L;
    for (int i = (bin.length() - 1); i >= 0; i--) {
        char c = bin.charAt(i);
        dec = dec + (Long.parseLong(c + "") * pow);
        pow = pow * 2;
    }
    return dec;
}

或者
long num = Long.parseLong("101110111",2);

0

测试一下,你会发现代码中有一行包含Scan.S()的内容。这个仅用于储存数据(字符串)。所以尝试一下:

PS:别忘了将文件保存为bindec。

import java.io.*;
class Scan
{        
    public static String S() 
    {
        String x;
    char c;
    boolean erreur;

    do
    {
            x = "";
            erreur = false;

            try
            {
                while((c = (char)System.in.read()) != '\n')
        {
                    if (c != '\r')
                    {
                        x += c;
                    }
                }
            }
            catch(IOException e)
            {
                System.out.print(" > enter String : ");
                erreur = true;
            }
    } while(erreur);

    return x;
    }
public class  bindec{

    public static void main (String[] args) {
        int b=0;
        String a;
        System.out.println("bin: ");
        a = Lire.S();
        int j=a.length()-1;
        for(int i=0;i<a.length() ;i++ ){
            if(a.charAt(i)=='1'){
            b += Math.pow(2,j);
        }
        if(a.charAt(i)=='0'){
            b+=0;
        }
        j=j-1;
    }
        System.out.println("dec: "+b);
    }
}

0
根据此内容: 1,我们可以编写此帮助函数:

    public static int convertBinaryToDecimal(String str) {
        int result = 0;
        for (int i = 0; i < str.length(); i++) {
            int value = Character.getNumericValue(str.charAt(i));
            result = result * 2 + value;
        }
        return result;
    }

0
假设我们有一个数字 23456789
它的二进制字符串是 1011001011110110000010101
最简单的方法是将所需的基数的所有副本放在左边,这个基数应该总是 字符串长度 - 1(假设没有前导零),然后将所有系数放在右边:
echo '1011001011110110000010101' | 

  mawk 'function __(_) {
      
      print; gsub(/./, "2*(", _)
      return substr(_,   4)
  }
  $!_ = __($_) $!_' FS= OFS=')+' | gtee >( gcat -b | lgp3 >&2; ) | bc 

23456789
1011001011110110000010101

 2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(
 +1)+0)+1)+1)+0)+0)+1)+0)+1)+1)+1)+1)+0)+1)+1)+0)+0)+0)+0)+0)+1)+0)+1)+0)+1

 2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(
  1)  )+1)+1)  )  )+1)  )+1)+1)+1)+1)  )+1)+1)  )  )  )  )  )+1)  )+1)  )+1

 2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(
 2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(2*(1)  )+1)+1)))+1))+1)+1)+1)+1)
                                      )+1)+1)  )))  ))+1)  )+1)  )+1

与标准形式相比,这种形式只对于二进制是简洁的,对于多项式比对于位串/向量转换更有帮助。
2^24 + 2^22 + 2^21 + 2^18 + 2^16 + 2^15 + 2^14 + 2^13 + 2^11 + 2^10 + 2^4 + 2^2

1*2^24 + 0*2^23 + 1*2^22 + 1*2^21 + 0*2^20 + 0*2^19 + 
1*2^18 + 0*2^17 + 1*2^16 + 1*2^15 + 1*2^14 + 1*2^13 + 
0*2^12 + 1*2^11 + 1*2^10 + 0*2^ 9 + 0*2^ 8 + 0*2^ 7 + 
0*2^ 6 + 0*2^ 5 + 1*2^ 4 + 0*2^ 3 + 1*2^ 2 + 0*2    + 1

数字总是相邻放置,使用大端记法,没有基数和指数的干扰。
通过使用相互支持的嵌套层次,完全消除了操作链中的幂运算符^。
计算2的幂次数(即(1 << 1))以获得log2(x)的整数部分。
类似地,计算10的幂次数(即((1 << 3) + (1 << 1)))以获得十进制版本中log10(x)的整数部分。
对于每个1位,与之关联的2的幂指数将是其右侧括号)的数量。
这个结构的十进制等价物如下所示。如果有的话,符号的紧凑无间隔形式会因数字之间的紧密接近而增加可读性。
10*(10*(10*(10*(10*(10*(10*( 
  
  2)+ 3)+ 4)+ 5)+ 6)+ 7)+ 8)+ 9

10*(10*(10*(10*(10*(10*(10*(2)+3)+4)+5)+6)+7)+8)+9

但是,标准形式需要包括多余的指数,这些指数可以通过在嵌套形式中计算层数来轻松得出,而不是仅使用7个副本的10和8个系数数字的最小值,总共15个数字。
2*10^7 + 3*10^6 + 4*10^5 + 5*10^4 + 
         6*10^3 + 7*10^2 + 8*10   + 9

2*10^7 + 3*10^6 + 4*10^5 + 5*10^4 + 6*10^3 + 7*10^2 + 8*10 + 9

在它无间隙的形式中的混乱...
2*10^7+3*10^6+4*10^5+5*10^4+6*10^3+7*10^2+8*10+9

一旦你在这个嵌套形式中看到任何进制的数字,而不是标准表示法,那么进制转换就变成了一个微不足道的练习,只需要逐层剥离嵌套的层级即可。

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