Javaコードに1つの文字列変数があり、大きなバイナリ数字が含まれています。どのように私はそれを変換することができますJavaで文字列の非常に大きな2進数を8進数に変換する方法
String binary2 = JTextArea.gettext(); // this is a String variable
Long binary3 = Long.parseLong(binary2);
System.out.print(Long.toOctalString(binary3));
Javaコードに1つの文字列変数があり、大きなバイナリ数字が含まれています。どのように私はそれを変換することができますJavaで文字列の非常に大きな2進数を8進数に変換する方法
String binary2 = JTextArea.gettext(); // this is a String variable
Long binary3 = Long.parseLong(binary2);
System.out.print(Long.toOctalString(binary3));
ごとに3桁のバイナリ(0
または1
は)(0
から7
に)正確に一つの8進数を表します。すべての3つの以降の文字を反復処理し、1 8進数に変換:文字列の長さがない場合は最初に取られる必要がある
"000" -> "0"
"001" -> "1"
"010" -> "2"
"011" -> "3"
...
"111" -> "7"
エクストラケア
は、だから私はアルゴリズムがシンプルだと思います例:
"1001001110"
"10|101|001|110"
2| 5| 1| 6
この方法では、文字列の解析と余分なメモリの必要はありません。任意の長い入力に対応し、超高速です
あなたのソリューションで使用するとより適切なBigInteger
クラスの使用を得ることができます。それは基数(あなたの基数= 8)をとるオーバーロードされたtoString()
メソッドを持っています。
String largeBinary = "10101010100000100111011010101";
String octalVersion = (new BigInteger(largeBinary,2)).toString(8);
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);
"これは任意の長い入力に対応できますが、事前に長さを知っている場合に限ります。 – Henry
@Henry:そうです、+1。私は長さについて言及しているが、強調してくれてありがとう。一方、サイズをあらかじめ知ることなく*することはできません。少なくとも、すべてを解析する必要はありません。 –