我的 Java 代码中有 1 个字符串变量,它包含大的二进制数字。我怎样才能转换它
String binary2 = JTextArea.gettext(); // this is a String variable
Long binary3 = Long.parseLong(binary2);
System.out.print(Long.toOctalString(binary3));
我的 Java 代码中有 1 个字符串变量,它包含大的二进制数字。我怎样才能转换它
String binary2 = JTextArea.gettext(); // this is a String variable
Long binary3 = Long.parseLong(binary2);
System.out.print(Long.toOctalString(binary3));
您可以使用BigInteger
更适合在您的解决方案中使用的类。它有一个重载toString()
方法,它采用基数(在你的情况下基数 = 8)。
String largeBinary = "10101010100000100111011010101";
String octalVersion = (new BigInteger(largeBinary,2)).toString(8);
每三个二进制数字(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
这种方法不需要解析字符串,也不需要额外的内存。它可以在任意长的输入上工作,而且速度超级快
一个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);