online java arrays char byte

online - Representando char como un byte en Java



byte[] to char[] java (4)

Debo convertir un char en un byte o una matriz de bytes. En otros idiomas, sé que un char es solo un byte. Sin embargo, mirando la clase de caracteres Java, su valor mínimo es / u0000 y su valor máximo es / uFFFF. Esto hace que parezca que un char tiene 2 bytes de largo.

¿Podré almacenarlo como un byte o necesito almacenarlo como dos bytes?

Antes de que alguien pregunte, diré que estoy tratando de hacer esto porque estoy trabajando bajo una interfaz que espera que mis resultados sean una matriz de bytes. Así que tengo que convertir mi char en uno.

Por favor, hágamelo saber y ayúdame a entender esto.

Gracias jbu


Para ampliar lo que otros dicen, si tiene un carácter que necesita como una matriz de bytes, primero cree una cadena que contenga ese carácter y luego obtenga la matriz de bytes de la cadena:

private byte[] charToBytes(final char x) { String temp = new String(new char[] {x}); try { return temp.getBytes("ISO-8859-1"); } catch (UnsupportedEncodingException e) { // Log a complaint return null; } }

Por supuesto, utilice el conjunto de caracteres apropiado. Mucho más eficiente que esto sería comenzar a trabajar con cadenas en lugar de tomar un char a la vez, convertir a una cadena y luego convertir a una matriz de bytes.


Para convertir caracteres a bytes, debe especificar una codificación de caracteres . Algunas codificaciones de caracteres utilizan un byte por carácter, mientras que otras utilizan dos o más bytes. De hecho, para muchos idiomas, hay demasiados caracteres para codificar con un solo byte.

En Java, la forma más sencilla de convertir de caracteres a bytes es con el método getBytes(Charset) la clase String . (La clase StandardCharsets define algunas codificaciones comunes.) Sin embargo, este método reemplazará silenciosamente los caracteres con si el carácter no se puede asignar bajo la codificación especificada. Si necesita más control, puede configurar un CharsetEncoder para manejar este caso con un error o usar un carácter de reemplazo diferente.


Un char es de hecho 16 bits en Java (¡y también es el único tipo sin firma!).

Si está seguro de que la codificación de sus caracteres es ASCII, entonces puede eliminarlos en un byte (ya que ASCII utiliza solo los 7 bits más bajos del carácter).

Si no necesita modificar los caracteres, o entender su significado dentro de una cadena, puede almacenar caracteres en dos bytes, como:

char[] c = ...; byte[] b = new byte[c.length*2]; for(int i=0; i<c.length; i++) { b[2*i] = (byte) (c[i]&0xFF00)>>8; b[2*i+1] = (byte) (c[i]&0x00FF); }

(Puede ser aconsejable reemplazar el 2 * por un cambio a la derecha, si la velocidad es importante).

Sin embargo, tenga en cuenta que algunos caracteres reales (mostrados) (o, más precisamente, los puntos de código de Unicode) están escritos en dos caracteres consecutivos. Por lo tanto, cortar entre dos caracteres no garantiza que esté cortando entre caracteres reales.

Si necesita decodificar / codificar o manipular su matriz char de una manera que tenga en cuenta las cadenas, debería intentar decodificar y codificar su matriz char o String usando las herramientas java.io, que aseguran la manipulación adecuada de los caracteres.


char en java es un valor de 16 bits sin firmar. Si lo que tiene cabrá en 7 bits, simplemente haga la conversión a un byte (por ejemplo, se ajustará ASCII).

También puedes java.nio.charset APIs java.nio.charset .