如何在Java中将字符串中的非常大的二进制转换为八进制

时间:2013-01-12 09:37:15

标签: java

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

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

3 个答案:

答案 0 :(得分:5)

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

String largeBinary = "10101010100000100111011010101";
String octalVersion = (new BigInteger(largeBinary,2)).toString(8);

答案 1 :(得分:4)

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

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

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

如果字符串的长度不是3的乘数,则需要特别注意。示例:

"1001001110"

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

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

答案 2 :(得分: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);