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"?
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"?
La Héctor cadena es adecuado para esta conversión:
System.out.println("string " + new String(new byte[] {0x63}));
@Downvoter ¿Algún comentario? – Matten
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
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);
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.
+1 por mencionar la codificación –
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
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.
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);
que es posible utilizar
la carácter equivalente a 0x63 es 'c', pero byte equivalente a es 99
System.out.println("byte "+(char)0x63);
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.
String str = "0x63";
int temp = Integer.parseInt(str.substring(2, 4), 16);
char c = (char)temp;
System.out.print(c);
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