Pergunta

Nós tentar converter de string para Byte[] usando o seguinte código Java:

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

Nós temos uma matriz de bytes de comprimento 22 bytes, que não tem certeza onde este preenchimento vem. Como faço para obter uma matriz de comprimento 20?

Foi útil?

Solução

de Alexandre explica por que ele está lá, mas não como livre-se disso. Você só precisa especificar o endianness você quer em nome de codificação:

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

Outras dicas

Pode ser os dois primeiros bytes são o Byte Order Mark . Especifica a ordem de bytes em cada palavra de 16 bits utilizado na codificação.

Tente imprimir os bytes em hexadecimal para ver onde o extra 2 bytes são adicionados - são no início ou no fim

?

Eu estou escolhendo que você vai encontrar um byte ordem marcador no início (0xFEFF .) - este permite que qualquer pessoa consumir (receber) a matriz de bytes para reconhecer se a codificação é little-endian ou big-endian

UTF tem um marcador de ordem de bytes no início que diz que este fluxo é codificada em um formato particular. Como os outros usuários têm a pontas, o
1º byte é 0xfe
2º byte é 0xFF
os bytes restantes são
0
48
0
49
0
50
0
51
0
52
0
53
0
54
0
55
0
56
0
57

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top