UTF-16 преобразование задано неверное шестнадцатеричное значение - PullRequest
0 голосов
/ 15 сентября 2018

Фрагмент кода:

String str = "h";
StringBuffer buf = new StringBuffer();
byte[] bytes = str.getBytes("UTF-16BE");
for (int i = 0; i < bytes.length; i++) {
    String byteAsHex = Integer.toHexString(bytes[i]);
    buf.append(byteAsHex);
}
System.out.println(buf.toString());

Вывод: 068 где LATIN SMALL LETTER H равен 0068.

Не могли бы вы сказать, почему отсутствует ведущий 0?

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Это связано с тем, что Integer.toHexString(0) приводит к "0", но не "00".

. Эту проблему можно решить, заменив

Integer.toHexString(bytes[i])

на

* 1010.*
0 голосов
/ 15 сентября 2018

Это происходит потому, что Integer.toHexString() всегда будет возвращать кратчайшее возможное представление числа, то есть без начальных нулей.Итак, в вашем случае у вас есть массив из 2 байтов: [0, 0x68] и Integer.toHexString() вызывается дважды, первый раз, когда он возвращает 0, и второй раз, когда он возвращает 68.

Чтобы решить эту проблему, вам нужно добавить '0' к каждой строке, возвращаемой Integer.toHexString(), если длина строки равна 1.

...