Frage

Wir versuchen, aus Zeichenfolge zu konvertieren dem folgenden Java-Code Byte[] mit:

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

Wir bekommen einen Byte-Array mit einer Länge von 22 Bytes, sind wir nicht sicher, wo diese Polsterung herkommt. Wie erhalte ich ein Array mit einer Länge von 20?

War es hilfreich?

Lösung

Alexander Antwort erklärt, warum es da ist, aber nicht, wie man werde es los. Sie müssen lediglich die endianness Sie in der Codierung Namen angeben möchten:

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

Andere Tipps

Kann sein, die ersten beiden Bytes sind die Byte Order Mark . Es gibt die Reihenfolge des Bytes in jedem 16-Bit-Wort in der Codierung verwendet wird.

Versuchen Sie, das Bytes in Hex-Druck, um zu sehen, wo das zusätzliche 2 Bytes hinzugefügt wird - ist sie am Anfang oder am Ende

Ich empfange, dass Sie einen Byteorder Marker zu Beginn finden (0xFEFF .) - dies ermöglicht es jeden (Empfang) den Byte-Array raubend zu erkennen, ob die Codierung little-endian oder big-endian ist

UTF hat am Anfang einen Byte-Reihenfolge Marker, der dieser Strom sagt, dass in einem bestimmten Format codiert ist. Wie die anderen Benutzer haben darauf hingewiesen, die
1. Byte ist 0xfe
2. Byte ist 0xFF
die restlichen Bytes sind
0
48
0
49
0
50
0
51
0
52
0
53
0
54
0
55
0
56
0
57

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top