Binário para texto em Java

Eu tenho uma String com dados binários (1110100) Eu quero tirar o texto para que eu possa imprimi-lo (1110100 iria imprimir “t”). Eu tentei isso, é semelhante ao que eu usei para transformar meu texto em binário, mas não está funcionando:

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

Quaisquer correções ou sugestões seriam muito apreciadas.

Obrigado!

Você pode usar Integer.parseInt com uma raiz de 2 (binário) para converter a string binária em um inteiro:

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

Então, se você quiser o caractere correspondente como uma string:

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

Eu sei que o OP declarou que seu binário estava em um formato String , mas por uma questão de completude eu pensei em adicionar uma solução para converter diretamente de um byte[] em uma representação de String alfabética.

Como casablanca afirmou, você basicamente precisa obter a representação numérica do caractere alfabético. Se você estiver tentando converter algo mais longo que um único caractere, ele provavelmente virá como um byte[] e, em vez de convertê-lo em uma string e usar um loop for para append os caracteres de cada byte você pode usar ByteBuffer e CharBuffer para fazer o levantamento para você:

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

NB Usa conjunto de caracteres UTF

Como alternativa, usando o construtor String:

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

Este é o meu (Funcionando bem no 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) 

e a impressão do método compactado para o console:

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

Tenho certeza de que existem maneiras “melhores” de fazer isso, mas essa é a menor que você provavelmente pode obter.

Aqui está a resposta.

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

O contrário (Onde “info” é o texto de input e “s” a versão binária dele)

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

Olhe para a function parseInt . Você também pode precisar de um casting e da function Character.toString .