这里需要一些帮助:
我被分配了一个项目,使用 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 个问题。
溢出肯定会发生,因为
int
最多只能容纳 2^31 - 1 的值,而二进制
中有超过 31 位> 字符串。将decimal
声明为long
。long decimal = 0;
当添加到
十进制
时,您正在从循环的错误端应用指数。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/