9
votes

Binaire au texte en Java

J'ai une chaîne avec des données binaires dedans (1110100), je veux obtenir le texte afin que je puisse l'imprimer (1110100 imprimerait "T"). J'ai essayé cela, c'est semblable à ce que j'ai utilisé pour transformer mon texte en binaire, mais cela ne fonctionne pas du tout:

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


0 commentaires

8 Réponses :


0
votes

Regardez le parseint fonction. Vous avez peut-être aussi besoin d'une distribution et du caractère.tostring fonction.


0 commentaires

27
votes

Vous pouvez utiliser INTEGER.PARSINTINT CODE> avec une radix de 2 (binaire) pour convertir la chaîne binaire en un entier:

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


3 commentaires

Merci, ça fait beaucoup de sens, mais je ne comprends pas comment faire un nouveau personnage d'un int (charcode)


@Nick: Il suffit de le jeter à Char .


Puis-je nommer cette chose comme une représentation vectorielle du texte?



1
votes

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


0 commentaires

1
votes

Voici la réponse.

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


0 commentaires

5
votes

Je sais que l'OP a déclaré que leur binaire était dans un format code> de chaîne de code>, mais pour un souci de complétude, je pensais ajouter une solution à convertir directement à partir d'un octet [] code > à une représentation de chaîne alphabétique.

comme Casablanca EM> indiquait que 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 long qu'un seul caractère, il viendra probablement en tant que octet [] code> et au lieu de la convertir à une chaîne puis en utilisant une boucle pour ajouter les caractères de chaque octet code> Vous pouvez utiliser BYTEBUFFER A > et Charbuffer pour faire le levage pour vous : p> xxx pré>

nb Utilise UTF Cart Set em> Strort> P>

Alternativement à l'aide du constructeur de chaîne: P>

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


0 commentaires

6
votes

C'est mon seul (bien fonctionnant sur Java 8): XXX PRE>

et la méthode compressée Impression sur la console: P>

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


0 commentaires

3
votes
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();
}

0 commentaires

0
votes

Aussi, vous pouvez également utiliser une solution alternative sans flux et expressions régulières ( basée sur la réponse de Casablanca ): xxx < / Pré>

Vous avez juste besoin de Ajoutez le caractère spécifié en tant que chaîne à la séquence de caractères.


0 commentaires