0

これが私がやろうとしていることです。私は文字列を持っています:

String s="ch"

次の方法でバイナリ文字列に変換します

char ar[]=s.toCharArray();
StringBuilder sb= new StringBuilder("00"); /* i am appending to extra zeros because                        
                                                  when i convert "ch" to binary string it   
                                                 consists of 14 characters(0s and 1s) and i                 
                                               need them to be a multiple of 8, so i add 2 
                                                0s to make it 16)*/
String wm="  ";
for(char c:ar)
{
    wm=Integer.toBinaryString((int)c);
    sb.append(wm);
}

今、私はこのバイナリ文字列を文字に変換したいと思っています...出力として「ch」が返されるようにします。誰でも助けることができますか?

4

4 に答える 4

0

0 を追加する方法が正しくありません。2 つの 0 が短い理由は、c と h がバイナリに変換されたとき、c が 1100011 になったためです。 0 の文字列。

最終的な文字列は、0011000111101000 ではなく、0110001101101000 にする必要があります。

バイナリ文字列を適切に構築したら、次のコードを使用して文字列に戻すことができます。

StringBuilder result = new StringBuilder();
for(int i = 0; i < binaryStr.length(); i += 8){
  result.append((char)Integer.parseInt(binaryStr.substring(i, i + 8), 2));
}

他にも賢いやり方はあると思いますが、私が思いつくのはこれくらいです。

于 2014-04-16T12:00:50.423 に答える
0

メソッドを使用しInteger.parseIntて に変換できintますが、基数 (2) に言及する必要があります。intその後、これを に変換できますString。このような:

int chars = Integer.parseInt(wm, 2);
String str = new Character((char)chars).toString();
于 2014-04-15T11:51:33.140 に答える
0

intバイナリ文字列をwithに解析しInteger#parseInt(String s, int radix)てから、次のようにキャストできますchar

char result = (char) Integer.parseInt(s, 2);

EDIT 文字列は次のようになります。

0011000111101000
00<--c--><--h-->

cと を別々に取得hするには、 を分割する必要がありますStringString#substring()を使用して、異なる文字に属する文字列の部分を取得してみてください。小文字はすべて 7 桁なので、それほど難しくありません。

于 2014-04-15T11:39:14.223 に答える
0

文字をバイナリに変換する際に考慮すべき点の 1 つは、バイナリの長さが 8 ビットになるように左側にゼロを埋め込むことです。これは、次のような方法で実現できます。

// "%08d" will pad zeroes to the left if it's not 8 in length
String.format("%08d", Integer.parseInt(Integer.toBinaryString((int)c)))

を使用しStringBuilderてバイナリ文字列を作成しているため、上記を次のString.format()ように使用します。

String s = "ch";
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
    sb.append(String.format("%08d", Integer.parseInt(Integer.toBinaryString((int)c))));
}
System.out.println(sb);

結果:

|--c---||--h---|
0110001101101000

そして、その逆(バイナリから文字へ)は次のようになります。

for (int i = 0; i < sb.length(); i += 8) {
    System.out.print((char)Integer.parseInt(sb.substring(i, i + 8), 2));
}
System.out.println();

結果:

ch

すべて一緒に次のようになります。

public static void main(String[] args) throws Exception {
    String s = "ch";
    StringBuilder sb = new StringBuilder();
    for (char c : s.toCharArray()) {
        sb.append(String.format("%08d", Integer.parseInt(Integer.toBinaryString((int)c))));
    }
    System.out.println(sb);

    for (int i = 0; i < sb.length(); i += 8) {
        System.out.print((char)Integer.parseInt(sb.substring(i, i + 8), 2));
    }
    System.out.println();
}

結果:

0110001101101000
ch
于 2015-06-05T19:42:08.983 に答える