Java将二进制字符串转换为十进制[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java将二进制字符串转换为十进制[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我试着编写一个将二进制转换为十进制的代码。但它给了我一个巨大的成果。你能告诉我怎么做吗?我看到使用余数的代码并给出正确的结果,但我真的很想知道代码中的错误是什么,谢谢
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)
另一答案
这里的人已经回答了什么问题。对字符执行Math.pow(2, i)
会产生不一致的结果。
如果您要将二进制值转换为Integer
,这可以帮助您。
Integer.parseInt(binaryString, 2)
其中2
的值是radix
值。
Java documentation和类似的SO讨论相同的主题可用here。
另一答案
当你使用str.charAt(16-1-i)
时,你会得到一个代表一个字母的字符。所以你没有得到数字0或1,而是相应的字母。由于字母在Java中表示为整数,因此不会出现类型错误。代表0字母的数字是48,1代表49.要将字母转换为正确的数字,你必须写(str.charAt(16-1-i)-48)
而不是str.charAt(16-1-i)
。
以上是关于Java将二进制字符串转换为十进制[重复]的主要内容,如果未能解决你的问题,请参考以下文章