Pregunta

I tiene una cadena con datos binarios en el mismo (1110100) Quiero llegar el texto a cabo para que pueda imprimirlo (1110100 imprimiría "t"). He intentado esto, es similar a lo que he utilizado para transformar mi texto a binario, pero que 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!

¿Fue útil?

Solución

Se puede utilizar Integer.parseInt con un radix de 2 (binario) para convertir la cadena binaria de un número entero:

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

A continuación, si desea que el carácter correspondiente en forma de una cadena:

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

Otros consejos

Sé que el OP declaró que su binario estaba en un formato String pero en aras de la exhaustividad pensé que iba a añadir una solución para convertir directamente desde un byte[] a una representación de cadena alfabético.

Casablanca dijo que básicamente necesita para obtener la representación numérica del carácter alfabético. Si usted está tratando de convertir nada más que un solo personaje que probablemente vendrá como byte[] y en lugar de convertir que en una cadena y luego usando un bucle for para añadir los caracteres de cada byte puede utilizar ByteBuffer y CharBuffer para hacer el trabajo para usted:

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

N.B. conjunto usos UTF carbón

Alternativamente utilizando el constructor de la secuencia:

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

Esta es mi única (bien de Trabajo sobre 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 de comprimido de imprimir a 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 maneras "mejores" que hacer esto, pero esta es la más pequeña es probable que pueda conseguir.

Aquí está la respuesta.

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

El revés (Donde "info" es el texto de entrada y "s" la versión binaria de la misma)

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

Mire la parseInt función. También puede ser necesario un reparto y la Character.toString función.

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();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top