2010-11-18 5 views
6

J'ai une chaîne contenant des données binaires (1110100) Je veux sortir le texte pour que je puisse l'imprimer (1110100 afficherait "t"). J'ai essayé, il est semblable à ce que je transformer mon texte en binaire, mais il ne fonctionne pas du tout:Texte binaire en 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; 
    } 

Les corrections ou suggestions seraient appréciés.

Merci!

Répondre

24

Vous pouvez utiliser Integer.parseInt avec un radix de 2 (binaire) pour convertir la chaîne binaire à un nombre entier:

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

Ensuite, si vous voulez que le caractère correspondant comme une chaîne:

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

Merci, cela fait beaucoup de sens, mais je ne comprends pas comment faire un nouveau caractère à partir d'un int (charCode) – Nick

+2

@Nick: Il suffit de le transformer en 'char'. – casablanca

+0

super merci beaucoup! – Nick

1

L'inverse (Où "info" est le texte d'entrée et "s" la version binaire de celui-ci)

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

Voici la réponse.

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

Je sais que le PO a déclaré que leur binaire était dans un format String mais pour être complet, je pensais que je voudrais ajouter une solution pour convertir directement à partir d'un byte[] à une représentation alphabétique String.

Comme casablanca vous avez essentiellement besoin d'obtenir la représentation numérique du caractère alphabétique. Si vous essayez de convertir quelque chose de plus qu'un seul caractère, il apparaîtra probablement comme un byte[] et au lieu de convertir cela en une chaîne, puis en utilisant une boucle for pour ajouter les caractères de chaque byte vous pouvez utiliser ByteBuffer et CharBuffer pour faire le levage pour vous:

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

NB Utilise UTF CHAR

encore à l'aide du constructeur String:

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

C'est mon (fonctionne bien sur 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) 

et l'impression de méthode comprimé à la console:

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

Je suis sûr qu'il y a "pari ter "façons de le faire, mais c'est le plus petit que vous pouvez probablement obtenir.