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

3

我尝试编写一个将二进制转换为十进制的代码。但它给出了一个巨大的结果。你能告诉我如何处理吗?我看到有些代码使用余数可以给出正确的结果,但我真的很想知道我的代码哪里出了问题。谢谢。

    double number = 0;
    for (int i = 0; i < 16; i++) {
        double temp = str.charAt(16-1 - i) * Math.pow(2, i);
        number = number + temp;
    }
3个回答

4

这是您的代码出错的地方:

str.charAt(16-1 - i) * Math.pow(2, i);

您刚刚将一个char与一个double相乘。这将计算出char的ASCII值乘以double,而不是0或1。

您需要先将其转换为整数:

Integer.parseInt(Character.toString(str.charAt(16-1 - i))) * Math.pow(2, i)

或者,你可以只:
Integer.parseInt(binaryString, 2)

0

当你使用 str.charAt(16-1-i) 时,你会得到一个 char 类型的返回值,它代表了一个单个的字母。因此,你不会得到数字 0 或 1,而是对应的字母。由于 Java 中字母被表示为整数,所以你不会遇到类型错误。要将字母转换为正确的数字,你需要写成 (str.charAt(16-1-i)-48) 而不是 str.charAt(16-1-i)


0

这里的人已经回答了出了什么问题。对字符执行 Math.pow(2, i) 会产生不一致的结果。

如果你要将二进制值转换为一个 Integer,这可能会对你有所帮助。

Integer.parseInt(binaryString, 2)

其中值为2的是基数值。

Java文档和类似的关于该主题的SO讨论可以在这里找到。


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