Иногда требуется конвертировать массив байтов в строку в шестнадцатеричном представлении. Возможно, у вас есть некий код или хэш, представленный массивом байтов, который требуется отобразить в шестнадцатеричном виде. Сделать это довольно просто.

Конвертирование массива байтов в шестнадцатеричную строку

Самый простой способ конвертировать байтовый массив в hex представление – воспользоваться нижеприведённой функцией:

public static String byteArrayToHex(byte[] a) {
    StringBuilder sb = new StringBuilder(a.length * 2);
    for(byte b: a) {
        sb.append(String.format("%02x", b));
    }
    return sb.toString();
}

Использовать её предельно просто:

byte[] password = "secret-password".getBytes();
System.out.println(byteArrayToHex(password));

Конвертирование шестнадцатеричной строки в массив байтов

Если же вам требуется преобразовать строку в шестнадцатеричном представлении в массив байтов, воспользуйтесь следующей функцией:

public static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                + Character.digit(s.charAt(i+1), 16));
    }
    return data;
}

Пример использования:

String hex = "7365637265742d70617373776f7264";
System.out.println(new String(hexStringToByteArray(hex)));

Как преобразовать массив байтов в шестнадцатеричную строку и обратно