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

标签 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);
    }
}

run: 2147483647 //this is incorrect. it should be 46118402748

非常感谢您的帮助

最佳答案

您的代码有 2 个问题。

  1. 溢出肯定会发生,因为 int 最多只能容纳 2^31 - 1 的值,而二进制中有超过 31 位> 字符串。将 decimal 声明为 long

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

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

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

    使用Math.pow可能被认为是过度杀伤力。您也可以尝试

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

关于java - 在 Java 中将大型二进制字符串转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24664859/

相关文章:

java - 从共享首选项获取值时出现空指针异常

c - 获取数字的第二个最高有效位

java - 如何在 Java 中用减法保持十进制值

c - 十进制到八进制转换器,最后一位数字问题

java - 不使用 GWT.generate 生成 GWT 类

java - java.lang.Thread.State : WAITING (parking) 90%线程解析

java - java 如何判断没有捕获到异常

assembly - 如果只需要结果的低部分,可以使用哪个 2 的补码整数运算而不将输入中的高位清零?

python - Pandas 数据帧 : How to convert binary columns into one categorical column?

mysql - 十进制数据类型四舍五入值