2011-12-28 23 views
13

lo uso por debajo de código de bytes para convertir a cadena:Convertir byte en cadena en Java

System.out.println("string " + Byte.toString((byte)0x63)); 

¿Por qué imprimir "cadena de 99". ¿Cómo modificar para dejar que se imprima "cadena c"?

+0

Es imposible * solo * convertir un byte en una cadena.[Debe usar una codificación de caracteres] (http://stackoverflow.com/questions/10611455/what-is-character-encoding). – Raedwald

Respuesta

13

La Héctor cadena es adecuado para esta conversión:

System.out.println("string " + new String(new byte[] {0x63})); 
+0

@Downvoter ¿Algún comentario? – Matten

+1

Porque la respuesta de gustafc tiene un punto muy importante: el constructor String (byte []) usa la codificación predeterminada del sistema para convertir la matriz de bytes en caracteres de cadena. No se debe suponer que un valor de 0x63 bytes se asigna a la letra 'c'. Por ejemplo, en UTF-16 la letra 'c' está representada por 2 bytes de codificación, no uno. Esta publicación de blog explica más detalladamente esto: http://www.joelonsoftware.com/articles/Unicode.html – tbacker

3

Puede utilizar printf:

System.out.printf("string %c\n", 0x63); 

Usted puede así crear una cadena con tal formato, utilizando String#format:

String s = String.format("string %c", 0x63); 
+0

¿Puede convertirse a cadena? – brian

+0

Sí, ver mi edición – MByD

32
System.out.println(new String(new byte[]{ (byte)0x63 }, "US-ASCII")); 

Tenga en cuenta especialmente que la conversión de bytes a cadenas siempre implica una codificación. Si no lo especifica, utilizará la codificación predeterminada de la plataforma, lo que significa que el código se puede romper cuando se ejecuta en diferentes entornos.

+2

+1 por mencionar la codificación –

+10

Para evitar la verificación de 'UnsupportedEncodingException' lanzada por ese constructor, es probable que desee pasar [' StandardCharsets.US_ASCII'] (http://docs.oracle.com/javase/7/docs/api/java/nio/charset/StandardCharsets.html#US_ASCII) en lugar de utilizar el nombre del juego de caracteres. – gustafc

2

Tienes que construir una nueva cadena de una matriz de bytes. El primer elemento en su byteArray debe ser 0x63. Si desea agregar más letras, haga que el byteArray sea más extenso y agréguelo a los siguientes índices.

byte[] byteArray = new byte[1]; 
byteArray[0] = 0x63; 

try { 
    System.out.println("string " + new String(byteArray, "US-ASCII")); 
} catch (UnsupportedEncodingException e) { 
    // TODO: Handle exception. 
    e.printStackTrace(); 
} 

Tenga en cuenta que la especificación de la codificación con el tiempo se producirá una UnsupportedEncodingException y hay que manejar esa consecuencia.

1

Si se trata de un solo byte, simplemente tire la byte a un char y debería funcionar ser muy bien es decir, darle una entidad char correspondiente al valor de punto de código del byte dado. Si no, use el constructor String como se menciona en otro lugar.

char ch = (char)0x63; 
System.out.println(ch); 
3

que es posible utilizar

la carácter equivalente a 0x63 es 'c', pero byte equivalente a es 99

System.out.println("byte "+(char)0x63); 
9

Uso carbón en lugar de bytes:

System.out.println("string " + (char)0x63); 

O si quieres ser un puritano Unicode, usas puntos de código:

System.out.println("string " + new String(new int[]{ 0x63 }, 0, 1)); 

Y si te gusta la vieja escuela US-ASCII "cada byte es un carácter" idea:

System.out.println("string " + new String(new byte[]{ (byte)0x63 }, 
              StandardCharsets.US_ASCII)); 

Evitar el uso de la String(byte[]) constructor recomienda en otras respuestas; se basa en el juego de caracteres predeterminado. Pueden surgir circunstancias donde 0x63 en realidad no es el carácter c.

1
String str = "0x63"; 
int temp = Integer.parseInt(str.substring(2, 4), 16); 
char c = (char)temp; 
System.out.print(c);