9

バイナリデータを含む文字列があります(1110100)テキストを出力して印刷できるようにしたい(1110100は「t」を印刷します)。これを試してみましたが、テキストをバイナリに変換するために使用したものと似ていますが、まったく機能していません:

    public static String toText(String info)throws UnsupportedEncodingException{
        byte[] encoded = info.getBytes();
        String text = new String(encoded, "UTF-8");
        System.out.println("print: "+text);
        return text;
    }

修正や提案をいただければ幸いです。

ありがとう!

4

8 に答える 8

27

Integer.parseInt基数 2 (バイナリ) を使用して、バイナリ文字列を整数に変換できます。

int charCode = Integer.parseInt(info, 2);

次に、対応する文字を文字列として取得する場合:

String str = new Character((char)charCode).toString();
于 2010-11-18T04:40:21.440 に答える
3
public static String binaryToText(String binary) {
    return Arrays.stream(binary.split("(?<=\\G.{8})"))/* regex to split the bits array by 8*/
                 .parallel()
                 .map(eightBits -> (char)Integer.parseInt(eightBits, 2))
                 .collect(
                                 StringBuilder::new,
                                 StringBuilder::append,
                                 StringBuilder::append
                 ).toString();
}
于 2019-07-15T14:52:45.010 に答える
1

逆(「info」は入力テキストで、「s」はそのバイナリバージョンです)

byte[] bytes = info.getBytes();
BigInteger bi = new BigInteger(bytes);
String s = bi.toString(2); 
于 2010-11-18T04:51:36.020 に答える
1

これが答えです。

private String[] splitByNumber(String s, int size) {
    return s.split("(?<=\\G.{"+size+"})");
}
于 2012-08-14T17:39:15.113 に答える
0

関数を見てくださいparseIntCharacter.toStringキャストと関数も必要になる場合があります。

于 2010-11-18T04:37:45.980 に答える
0

また、ストリームと正規表現を使用せずに代替ソリューションを使用することもできます (カサブランカの回答に基づく):

public static String binaryToText(String binaryString) {
    StringBuilder stringBuilder = new StringBuilder();
    int charCode;
    for (int i = 0; i < binaryString.length(); i += 8) {
        charCode = Integer.parseInt(binaryString.substring(i, i + 8), 2);
        String returnChar = Character.toString((char) charCode);
        stringBuilder.append(returnChar);
    }
    return stringBuilder.toString();
}

指定した文字を文字列として文字シーケンスに追加するだけです。

于 2020-05-13T01:06:07.023 に答える