2010-11-13 16 views
10

Voglio ottenere il binario (011001 ..) da una stringa ma invece ottengo [B @ addbf1, ci deve essere una trasformazione semplice per farlo ma non lo vedo.Stringa all'output binario in Java

public static String toBin(String info){ 
    byte[] infoBin = null; 
    try { 
    infoBin = info.getBytes("UTF-8"); 
    System.out.println("infoBin: "+infoBin); 
    } 
    catch (Exception e){ 
    System.out.println(e.toString()); 
    } 
    return infoBin.toString(); 
} 

Qui ricevo infoBin: [B @ addbf1
e vorrei infoBin: 01001 ...

Qualsiasi aiuto sarebbe apprezzato, grazie!

+2

Sembra che ti aspetti che i bit vengano stampati, non i byte. – akf

risposta

18

Solo Integer ha un metodo per convertire in rappresentazione di stringa binaria check this out:

import java.io.UnsupportedEncodingException; 

public class TestBin { 
    public static void main(String[] args) throws UnsupportedEncodingException { 
     byte[] infoBin = null; 
     infoBin = "this is plain text".getBytes("UTF-8"); 
     for (byte b : infoBin) { 
      System.out.println("c:" + (char) b + "-> " 
        + Integer.toBinaryString(b)); 
     } 
    } 
} 

sarebbe stampare:

c:t-> 1110100 
c:h-> 1101000 
c:i-> 1101001 
c:s-> 1110011 
c: -> 100000 
c:i-> 1101001 
c:s-> 1110011 
c: -> 100000 
c:p-> 1110000 
c:l-> 1101100 
c:a-> 1100001 
c:i-> 1101001 
c:n-> 1101110 
c: -> 100000 
c:t-> 1110100 
c:e-> 1100101 
c:x-> 1111000 
c:t-> 1110100 

Imbottitura:

String bin = Integer.toBinaryString(b); 
if (bin.length() < 8) 
    bin = "0" + bin; 
+0

forse hai bisogno di un po 'di padding per i tuoi byte – stacker

+0

Grazie mille per il tuo aiuto! – Nick

+0

@stacker perché lo spazio è endodato solo su 6 cifre e non su 7? (es: c: -> 100000) – Nick

1

Quando si tenta di utilizzare + con un oggetto in un contesto di stringa, il compilatore java inserisce silenziosamente una chiamata al metodo toString().

In altre parole le sue dichiarazioni sembrano

System.out.println("infobin: " + infoBin.toString())

che in questo caso è quello ereditato da Object.

Sarà necessario utilizzare un ciclo for per selezionare ogni byte dall'array di byte.

4

Gli array non hanno un override sensato toString, quindi utilizzano la notazione di oggetto predefinita.

Cambia la tua ultima linea di

return Arrays.toString(infoBin); 

e si otterrà i risultati attesi.

+0

Ciao Andrzej, la tua risposta ha molto senso ma ottengo [84, 104, 105, 115, 32, 105, 115, 32, 97, 32, ..] invece di (01101010 ...) qualche suggerimento? grazie – Nick