web-dev-qa-db-ja.com

Javaのテキストへのバイナリ

バイナリデータを含む文字列があります(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;
    }

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

ありがとう!

7
Nick

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

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

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

String str = new Character((char)charCode).toString();
27
casablanca

OPがバイナリはString形式であると述べていることは知っていますが、完全を期すために、byte[]からアルファベットの文字列表現に直接変換するソリューションを追加すると思いました。

casablancaが述べたように、基本的にアルファベット文字の数値表現を取得する必要があります。 1文字より長いものを変換しようとすると、おそらくbyte[]として表示され、それを文字列に変換してからforループを使用して各byteの文字を追加する代わりに ByteBuffer および CharBuffer を使用して、リフティングを行うことができます。

public static String bytesToAlphabeticString(byte[] bytes) {
    CharBuffer cb = ByteBuffer.wrap(bytes).asCharBuffer();
    return cb.toString();
}

N.B。 UTF文字セットを使用

または、Stringコンストラクターを使用します。

String text = new String(bytes, 0, bytes.length, "ASCII");
4
tarka

これは私のものです(Java 8)で正常に動作しています:

String input = "01110100"; // Binary input as String
StringBuilder sb = new StringBuilder(); // Some place to store the chars

Arrays.stream( // Create a Stream
    input.split("(?<=\\G.{8})") // Splits the input string into 8-char-sections (Since a char has 8 bits = 1 byte)
).forEach(s -> // Go through each 8-char-section...
    sb.append((char) Integer.parseInt(s, 2)) // ...and turn it into an int and then to a char
);

String output = sb.toString(); // Output text (t)

およびコンソールへの圧縮メソッドの印刷:

Arrays.stream(input.split("(?<=\\G.{8})")).forEach(s -> System.out.print((char) Integer.parseInt(s, 2))); 
System.out.print('\n');

これを行うには「より良い」方法があると確信していますが、これはおそらく入手できる最小の方法です。

3
Leon Kasko

これが答えです。

private String[] splitByNumber(String s, int size) {
    return s.split("(?<=\\G.{"+size+"})");
}
1
Nelson Poon

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

byte[] bytes = info.getBytes();
BigInteger bi = new BigInteger(bytes);
String s = bi.toString(2); 
1
Emil

parseInt 関数を見てください。キャストと Character.toString 関数。

0
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();
}
0
Maroine Mlis