2010-11-18 13 views
6

Ich habe einen String mit binären Daten drin (1110100) Ich möchte den Text auslesen, damit ich ihn drucken kann (1110100 würde "t" drucken). Ich habe versucht, diese, ist es ähnlich, was ich verwenden, meinen Text zu binär zu verwandeln, aber es ist gar nicht funktioniert:Binär zu Text in Java

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 Vorschläge würden sehr geschätzt werden.

Danke!

Antwort

24

Sie Integer.parseInt mit einem Radix von 2 (binär) verwenden können, die binäre Zeichenfolge in eine ganze Zahl zu konvertieren:

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

Dann, wenn Sie das entsprechende Zeichen als String wollen:

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

Danke, es macht sehr viel Sinn, aber ich verstehe nicht, wie man ein neues Zeichen aus einem int (charCode) – Nick

+2

@Nick: Einfach auf "char" zu werfen. – casablanca

+0

super vielen dank! – Nick

0

Schauen Sie sich die parseInt Funktion an. Sie benötigen möglicherweise auch eine Besetzung und die Character.toString Funktion.

1

Anders herum (wobei "info" der eingegebene Text und "s" die binäre Version davon ist)

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

Hier ist die Antwort.

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

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

Als Casablanca angegeben, müssen Sie grundsätzlich die numerische Darstellung des Buchstabens erhalten. Wenn Sie versuchen, etwas länger als ein einzelnes Zeichen zu konvertieren, wird es wahrscheinlich als byte[] kommen und statt dies in eine Zeichenfolge zu konvertieren und dann eine For-Schleife verwenden, um die Zeichen der einzelnen byte anhängen können Sie ByteBuffer und CharBuffer, um die Aufhebung zu tun für Sie:

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

NB Verwendet UTF char gesetzt

Alternativ können Sie die String-Konstruktor:

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

Das ist mein ist (adaequat 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 das komprimierte Druckverfahren zu trösten:

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

Ich bin sicher, es gibt "Wette "Möglichkeiten, dies zu tun, aber das ist die kleinste, die Sie wahrscheinlich bekommen können.