У меня есть массив байтов. Я хочу, чтобы каждая строка байтов того массива была преобразована в свои соответствующие шестнадцатеричные значения.
Есть ли какая-либо функция в Java для преобразования массива байтов в Шестнадцатеричный?
Если вам нужно шестнадцатеричное представление постоянной ширины, т.е. 0A
вместо A
, чтобы вы могли однозначно восстановить байты, попробуйте format()
:
StringBuilder result = new StringBuilder();
for (byte bb : byteArray) {
result.append(String.format("%02X", bb));
}
return result.toString();
Попробуйте этот способ:
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 ()
(поскольку он правильно работает с отрицательными числами).
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
более предпочтительным.
байта
, от -128
до 127
, включительно