Binario a texto en Java

Tengo una cadena con datos binarios (1110100) Quiero sacar el texto para poder imprimirlo (1110100 imprimirá “t”). Intenté esto, es similar a lo que utilicé para transformar mi texto en binario pero no funciona en absoluto:

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

Cualquier corrección o sugerencia sería muy apreciada.

¡Gracias!

Puede usar Integer.parseInt con una raíz de 2 (binario) para convertir la cadena binaria en un entero:

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

Luego, si desea el carácter correspondiente como una cadena:

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

Sé que el OP dijo que su binario estaba en un formato de String , pero para completar, pensé que agregaría una solución para convertir directamente de un byte[] a una representación de Cadena alfabética.

Como dijo Casablanca , básicamente necesitas obtener la representación numérica del carácter alfabético. Si intenta convertir algo más de un solo carácter, probablemente lo haga como un byte[] y en lugar de convertirlo en una cadena y luego usar un bucle for para agregar los caracteres de cada byte , puede usar ByteBuffer y CharBuffer para hacer el levantamiento para ti:

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

NB usa el conjunto de caracteres UTF

Alternativamente, usando el constructor de cadenas:

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

Este es mi único (Funciona bien en 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) 

y el método comprimido que se imprime en la consola:

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

Estoy seguro de que hay formas “mejores” de hacer esto, pero este es el más pequeño que probablemente pueda obtener.

Aquí está la respuesta.

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

A la inversa (donde “información” es el texto de entrada y “s” es la versión binaria)

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

Mira la función parseInt . Es posible que también necesite un yeso y la función Character.toString .