Java コードに 1 つの文字列変数があり、大きな 2 進数が含まれています。どうすれば変換できますか
String binary2 = JTextArea.gettext(); // this is a String variable
Long binary3 = Long.parseLong(binary2);
System.out.print(Long.toOctalString(binary3));
Java コードに 1 つの文字列変数があり、大きな 2 進数が含まれています。どうすれば変換できますか
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);
3 桁の 2 進数 (0
または1
) は、正確に 1 桁の 8 進数( 0
~ ) を表し7
ます。
したがって、アルゴリズムは単純だと思います。後続の 3 文字ごとに繰り返し処理し、それらを 1 桁の 8 進数に変換します。
"000" -> "0"
"001" -> "1"
"010" -> "2"
"011" -> "3"
...
"111" -> "7"
文字列の長さが 3 の倍数でない場合は、最初に特に注意する必要があります。例:
"1001001110"
"10|101|001|110"
2| 5| 1| 6
このアプローチでは、文字列を解析する必要がなく、余分なメモリも必要ありません。任意の長い入力で動作し、超高速です
値は2^63-1までの任意のlong
数値を保持できます。これは、多くのアプリケーションで十分です。必要なことは、 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);