Domanda

Ho una stringa con dati binari in esso (1.110.100) Voglio ottenere il testo in modo che posso stampare (1.110.100 sarebbe stampare "t"). Ho provato questo, è simile a quello che ho usato per trasformare il mio testo in binario, ma non funziona affatto:

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

Le eventuali correzioni o suggerimenti sarebbe molto apprezzato.

Grazie!

È stato utile?

Soluzione

È possibile utilizzare Integer.parseInt con una radice di 2 (binario) per convertire la stringa binaria in un numero intero:

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

Poi, se si desidera che il carattere corrispondente come stringa:

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

Altri suggerimenti

So che il PO ha dichiarato che il loro binario era in un formato String, ma per ragioni di completezza ho pensato di aggiungere una soluzione per convertire direttamente da un byte[] a una rappresentazione stringa alfabetica.

casablanca ha dichiarato che, fondamentalmente, deve ottenere la rappresentazione numerica del carattere alfabetico. Se si sta tentando di convertire nulla per più di un singolo carattere probabilmente venire come una byte[] e invece di convertire che in una stringa e quindi utilizzando un ciclo for per aggiungere i caratteri di ogni byte è possibile utilizzare ByteBuffer e CharBuffer per fare il sollevamento per voi:

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

NB. set usi UTF char

In alternativa utilizzando il costruttore String:

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

Questa è la mia (bel lavoro su 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 il metodo compressa stampa alla console:

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

Sono sicuro che ci sono "migliori" modi per farlo, ma questo è il più piccolo, probabilmente si può ottenere.

Ecco la risposta.

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

Il contrario (Dove "info" è il testo di input e "s" la versione binaria di esso)

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

Guardate la parseInt funzione. Potrebbe anche essere necessario un cast e la Character.toString funzione.

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();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top