Подтвердить что ты не робот

Короткие toHexString

Существуют методы Integer.toHexString() и Long.toHexString(). По какой-то причине они не реализовали Short.toHexString().

Что такое канонический метод преобразования Short в шестую строку?

Невозможно использовать Integer.toHexString(), потому что Integer.toHexString(-33) равно ffffffdf, которое не является коротким значением.

4b9b3361

Ответ 1

Если в вашей системе short представлен как 16Bit, вы также можете просто сделать следующее.

String hex = Integer.toHexString(-33 & 0xffff);

Ответ 2

Да, вы можете просто взять два наименее значимых байта.

Это основная особенность представления Two Complement.

Ответ 3

Вы можете преобразовать ваш Integer.toHexString в шестнадцатеричную строку для короткого значения.

Integer имеет значение 32 bit, а Short имеет значение 16 bit. Таким образом, вы можете просто удалить 16 наиболее значимых бит из Hex String для short value, преобразованных в Integer, чтобы получить Hex String для Short.

Integer -> -33 = 11111111 11111111 11111111 11011111  == Hex = ffffffdf
Short   -> -33 =                   11111111 11011111  == Hex =     ffdf

Итак, просто возьмите последние 4 символы Hex String, чтобы получить то, что вы хотите.

Итак, вы хотите: -

Short sh = -33;
String intHexString = Integer.toHexString(sh.intValue());
String shortHexString = intHexString.substring(4);

Я думаю, что это сработает.

Ответ 5

Не самый простой способ сделать это, но я могу это сделать, преобразовывая в массив байтов, а затем преобразуя его в шестую строку.

 short a = 233;
 byte[] ret = new byte[2];

 ret[0] = (byte)(a & 0xff);
 ret[1] = (byte)((a >> 8) & 0xff);

 StringBuilder sb = new StringBuilder();
 for (byte b : ret) {
    sb.append(String.format("%02X ", b));
 }

Я думаю, что в значительной степени это сделает.