Код Java Для преобразования байта в Шестнадцатеричный

У меня есть массив байтов. Я хочу, чтобы каждая строка байтов того массива была преобразована в свои соответствующие шестнадцатеричные значения.

Есть ли какая-либо функция в Java для преобразования массива байтов в Шестнадцатеричный?

172
задан Kate Gregory 13 January 2014 в 04:31
поделиться

4 ответа

Если вам нужно шестнадцатеричное представление постоянной ширины, т.е. 0A вместо A, чтобы вы могли однозначно восстановить байты, попробуйте format():

StringBuilder result = new StringBuilder();
for (byte bb : byteArray) {
    result.append(String.format("%02X", bb));
}
return result.toString();
9
ответ дан 23 November 2019 в 20:38
поделиться

Попробуйте этот способ:

byte bv = 10;
String hexString = Integer.toHexString(bv);

Работа с массивом (если я вас правильно понял):

byte[] bytes = {9, 10, 11, 15, 16};
StringBuffer result = new StringBuffer();
for (byte b : bytes) {
    result.append(String.format("%02X ", b));
    result.append(" "); // delimiter
}
return result.toString();

Как упоминалось в полигенных смазочных материалах, String.format () является правильный ответ сравните с Integer.toHexString () (поскольку он правильно работает с отрицательными числами).

15
ответ дан 23 November 2019 в 20:38
поделиться
    byte[] bytes = {-1, 0, 1, 2, 3 };
    StringBuilder sb = new StringBuilder();
    for (byte b : bytes) {
        sb.append(String.format("%02X ", b));
    }
    System.out.println(sb.toString());
    // prints "FF 00 01 02 03 "

См. Также

  • синтаксис java.util.Formatter
    • % [флаги] [ширина] преобразование
      • Флаг «0» - результат будет дополнен нулями
      • Ширина 2
      • Преобразование «X» - Результат отформатирован как шестнадцатеричное целое число в верхнем регистре

. в тексте вопроса также возможно, что это то, что требуется:

    String[] arr = {"-1", "0", "10", "20" };
    for (int i = 0; i < arr.length; i++) {
        arr[i] = String.format("%02x", Byte.parseByte(arr[i]));
    }
    System.out.println(java.util.Arrays.toString(arr));
    // prints "[ff, 00, 0a, 14]"

В нескольких ответах здесь используется Integer.toHexString (int) ; это выполнимо, но с некоторыми оговорками. Поскольку параметром является int , расширяющее примитивное преобразование выполняется в аргумент байт , которое включает расширение знака.

    byte b = -1;
    System.out.println(Integer.toHexString(b));
    // prints "ffffffff"

8-битный байт , который подписан в Java, расширяется по знаку до 32-битного int . Чтобы эффективно отменить это расширение знака, можно замаскировать байт с помощью 0xFF .

    byte b = -1;
    System.out.println(Integer.toHexString(b & 0xFF));
    // prints "ff"

Другая проблема с использованием toHexString заключается в том, что он не дополняется нулями:

    byte b = 10;
    System.out.println(Integer.toHexString(b & 0xFF));
    // prints "a"

Оба фактора вместе взятые должны сделать решение String.format более предпочтительным.

Ссылки

294
ответ дан 23 November 2019 в 20:38
поделиться

Используйте

Integer.toHexString((int)b);
-2
ответ дан 23 November 2019 в 20:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: