Pregunta

Intentamos convertir la cadena a Byte [] utilizando el siguiente código Java:

String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16");

Obtenemos una matriz de bytes de 22 bytes de longitud, no estamos seguros de dónde proviene este relleno. ¿Cómo obtengo una matriz de longitud 20?

¿Fue útil?

Solución

La respuesta de Alexander explica por qué está ahí, pero no cómo desaste de eso. Simplemente debe especificar la endianidad que desea en el nombre de codificación:

String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16LE"); // Or UTF-16BE

Otros consejos

Los primeros dos bytes pueden ser Byte Order Mark . Especifica el orden de los bytes en cada palabra de 16 bits utilizada en la codificación.

Intente imprimir los bytes en hexadecimal para ver dónde se agregan los 2 bytes adicionales, ¿están al principio o al final?

Estoy seleccionando que encontrarás un marcador de orden de bytes al comienzo (0xFEFF ): esto permite que cualquiera que consuma (reciba) la matriz de bytes reconozca si la codificación es little-endian o big-endian.

UTF tiene un marcador de orden de bytes al principio que indica que esta secuencia está codificada en un formato particular. Como han señalado los demás usuarios, el
1er byte es 0XFE
2do byte es 0XFF
los bytes restantes son
0
48
0
49
0
50
0
51
0
52
0
53
0
54
0
55
0
56
0
57

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top