我尝试编写一个将二进制转换为十进制的代码。但它给出了一个巨大的结果。你能告诉我如何处理吗?我看到有些代码使用余数可以给出正确的结果,但我真的很想知道我的代码哪里出了问题。谢谢。
double number = 0;
for (int i = 0; i < 16; i++) {
double temp = str.charAt(16-1 - i) * Math.pow(2, i);
number = number + temp;
}
我尝试编写一个将二进制转换为十进制的代码。但它给出了一个巨大的结果。你能告诉我如何处理吗?我看到有些代码使用余数可以给出正确的结果,但我真的很想知道我的代码哪里出了问题。谢谢。
double number = 0;
for (int i = 0; i < 16; i++) {
double temp = str.charAt(16-1 - i) * Math.pow(2, i);
number = number + temp;
}
这是您的代码出错的地方:
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)
当你使用 str.charAt(16-1-i)
时,你会得到一个 char 类型的返回值,它代表了一个单个的字母。因此,你不会得到数字 0 或 1,而是对应的字母。由于 Java 中字母被表示为整数,所以你不会遇到类型错误。要将字母转换为正确的数字,你需要写成 (str.charAt(16-1-i)-48)
而不是 str.charAt(16-1-i)
。