Преобразование byte[] в HEX-строку на Java — все способы с примерами
Массив байтов часто нужно представить в виде hex-строки — например, для отображения хеш-сумм или содержимого бинарных файлов. В Java это можно сделать как с помощью String.format(), так и через побитовые операции (что быстрее).
Чтобы понять этот пример, нужно знать:
Массивы в Java
Классы и объекты в Java
Пример 1: преобразование массива байтов в hex через format
public class ByteHex {
public static void main(String[] args) {
byte[] bytes = {10, 2, 15, 11};
for (byte b : bytes) {
String st = String.format("%02X", b);
System.out.print(st);
}
}
}
Вывод:
0A020F0B
В этой программе у нас есть массив байтов bytes. Чтобы перевести его в шестнадцатеричный вид, мы перебираем каждый байт и применяем метод String.format().
Спецификатор %02X означает «вывести шестнадцатеричное значение (X) с минимальной шириной 2 знака (02), при необходимости дополнить ведущим нулём».
Этот способ относительно медленный для больших массивов. Заметно ускорить можно через побитовые операции.
Пример 2: преобразование массива байтов в hex через побитовые операции
public class ByteHex {
private final static char[] hexArray = "0123456789ABCDEF".toCharArray();
public static String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for ( int j = 0; j < bytes.length; j++ ) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
public static void main(String[] args) {
byte[] bytes = {10, 2, 15, 11};
String s = bytesToHex(bytes);
System.out.println(s);
}
}
Вывод этой программы такой же, как у Примера 1:
0A020F0B
Примечание
Побитовый сдвиг v >>> 4 выделяет старшую тетраду байта, а v & 0x0F — младшую. Каждая тетрада превращается в один шестнадцатеричный символ.