Frage

Ich habe einen String mit binären Daten darin (1110100) ich den Text aus zu bekommen, damit ich es drucken kann (1110100 würde „t“ drucken). Ich habe versucht, das, es ist ähnlich zu dem, was ich früher meinen Text, um binäre zu verwandeln, aber es funktioniert nicht:

    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;
    }

Korrekturen oder Anregungen würde sehr geschätzt werden.

Danke!

War es hilfreich?

Lösung

Sie können mit Integer.parseInt mit einem Radix von 2 (binär) die binären Zeichenfolge in eine Ganzzahl umgewandelt werden:

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

Dann, wenn Sie das entsprechende Zeichen als String wollen:

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

Andere Tipps

weiß ich das OP festgestellt, dass ihre binär in einem String Format war aber die Vollständigkeit halber Ich dachte, ich eine Lösung hinzufügen würde direkt von einem byte[] zu einer alphabetischen String-Darstellung zu konvertieren.

Wie casablanca angegeben Sie grundsätzlich die numerische Darstellung der alphabetischen Zeichen zu erhalten benötigen. Wenn Sie versuchen, etwas länger als ein einzelnes Zeichen konvertieren wird es wahrscheinlich als byte[] kommen und stattdessen, dass in einen String umzuwandeln und dann eine for-Schleife mit den Zeichen jedes byte anhängen Sie verwenden können, ByteBuffer und CharBuffer für Sie die Aufhebung tun:

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

N. B. Uses UTF Zeichensatz

Alternativ können Sie das String-Konstruktor:

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

Das ist mein ein (Arbeits fein auf 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)

und die Druckmethode Druck auf Konsole:

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

Ich bin sicher, dass es „besser“ Wege, dies zu tun, aber das ist die kleinsten Sie wahrscheinlich bekommen.

Hier ist die Antwort.

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

Der andere Weg, um (Wo „info“ ist die Eingabe von Text und „s“ die binäre Version davon)

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

Blick auf die parseInt Funktion. Sie müssen unter Umständen auch ein gegossenes und die Character.toString Funktion.

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();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top