我的Java代码中有1个String变量,它包含大的二进制数字。我怎样才能转换它
String binary2 = JTextArea.gettext(); // this is a String variable
Long binary3 = Long.parseLong(binary2);
System.out.print(Long.toOctalString(binary3));
答案 0 :(得分:5)
您可以使用更适合在您的解决方案中使用的BigInteger
类。它有一个重载的toString()
方法,它采用 radix (在你的情况下为radix = 8)。
String largeBinary = "10101010100000100111011010101";
String octalVersion = (new BigInteger(largeBinary,2)).toString(8);
答案 1 :(得分:4)
每三个二进制数字(0
或1
)恰好代表一个八进制数字(从0
到7
)。
所以我认为算法很简单:迭代每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);