在Java中将大二进制字符串转换为十进制

时间:2014-07-09 22:47:13

标签: java binary decimal

在这需要一些帮助:

我被分配了一个项目,使用Java将文件中的十六进制值转换为十进制,而不使用Java中可用的方法直接执行此操作(我们必须做很多事情)。

我已成功将我的十六进制值转换为二进制,但是在将二进制字符串转换为十进制时遇到了问题。输出不正确;我只需要在本节中提供帮助,所以我只需要将我需要转换的第一个二进制值放到简单易懂和解释的位置。这是我到目前为止所拥有的

public class binToDec {

    public static void main(String[] args) {
        int decimal = 0;
        String binary = "101010111100110111101111101010111100";
        for (int pow = (binary.length()-1); pow > -1; pow--) {
            if (binary.charAt(pow)=='1'){
            decimal += (Math.pow(2, pow));
            }
        }
        System.out.print(decimal);
    }
}
  

运行:2147483647 //这是不正确的。它应该是46118402748

非常感谢你的帮助

2 个答案:

答案 0 :(得分:2)

您的代码有两个问题。

  1. 肯定会出现溢出,因为int只能容纳最多2 ^ 31 - 1的值,并且binary字符串中的值超过31位。将decimal声明为long

    long decimal = 0;
    
  2. 在添加到decimal时,您正在从循环的错误一端应用指数。 0 char是最重要的,但您发送的0指数,就好像它是最不重要的。尝试

    decimal += (Math.pow(2, (len - pow - 1)));
    

    (这假设len被声明为int len = binary.length();。)

    使用Math.pow可能会被视为过度杀伤。你也可以尝试

    decimal += 1L << (len - pow - 1);
    

答案 1 :(得分:0)

它不起作用,因为Java中的int是32位,而你的二进制字符串有36位。这将导致溢出。