5

我的 Java 代码中有 1 个字符串变量,它包含大的二进制数字。我怎样才能转换它

String binary2 = JTextArea.gettext(); // this is a String variable
Long binary3 = Long.parseLong(binary2);
System.out.print(Long.toOctalString(binary3));
4

3 回答 3

5

您可以使用BigInteger更适合在您的解决方案中使用的类。它有一个重载toString()方法,它采用基数(在你的情况下基数 = 8)。

String largeBinary = "10101010100000100111011010101";
String octalVersion = (new BigInteger(largeBinary,2)).toString(8);
于 2013-01-12T09:42:57.770 回答
3

每三个二进制数字(01)正好代表一个八进制数字(从07)。

所以我认为算法很简单:遍历每 3 个后续字符并将它们转换为一个八进制数字:

"000" -> "0"
"001" -> "1"
"010" -> "2"
"011" -> "3"
...
"111" -> "7"

如果字符串的长度不是 3 的倍数,则在开始时需要格外小心。示例:

"1001001110"

"10|101|001|110"
  2|  5|  1|  6

这种方法不需要解析字符串,也不需要额外的内存。它可以在任意长的输入上工作,而且速度超级快

于 2013-01-12T09:39:59.793 回答
1

一个long值可以容纳最多2^63-1的任何数字,这对于许多应用程序来说已经足够了。您需要做的就是为parseLong(String string, int radix)方法(和toString(Long number, int radix)方法)提供适当的基数参数。

long number = Long.parseLong(binaryString, 2);
String octalString = Long.toOctalString(number); // or Long.toString(number, 8);
于 2013-01-12T10:06:12.267 回答