2010-11-13 22 views
10

Quiero obtener un binario (011001 ..) de una Cadena, pero en su lugar obtengo [B @ addbf1, debe haber una transformación sencilla para hacer esto pero no lo veo.Cadena de salida binaria en 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(); 
} 

Aquí tengo infoBin: [B @ addbf1
y me gustaría infoBin: 01001 ...

Cualquier ayuda se agradece, gracias!

+2

Parece que esperas que se impriman bits, no bytes. – akf

Respuesta

18

Sólo Entero tiene un método para convertir a la representación de cadena binaria que mira esto:

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

imprimiría:

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 

Relleno:

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

tal vez necesita un relleno para sus bytes – stacker

+0

Muchas gracias por su ayuda! – Nick

+0

@stacker ¿por qué el espacio está endodonado en solo 6 dígitos y no en 7? (ej: c: -> 100000) – Nick

1

Cuando intenta utilizar + con un objeto en un contexto de cadena, el compilador java inserta de forma silenciosa una llamada al método toString().

En otras palabras, sus declaraciones parecen

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

que en este caso es el heredado de Object.

Deberá usar un bucle for para seleccionar cada byte de la matriz de bytes.

4

Las matrices no tienen una anulación toString sensible, por lo que utilizan la notación de objeto predeterminada.

Cambiar la última línea para

return Arrays.toString(infoBin); 

y obtendrá el resultado esperado.

+0

Hola Andrzej, tu respuesta tiene mucho sentido pero recibo [84, 104, 105, 115, 32, 105, 115, 32, 97, 32, ..] en lugar de (01101010 ...) alguna sugerencia? gracias – Nick

Cuestiones relacionadas