Конвертировать Hex в ASCII в Java

Конвертировать Hex в ASCII в Java

1. обзор

В этой быстрой статье мы сделаем несколько простых преобразований между форматами Hex и ASCII.

В типичном случае использования формат Hex может использоваться для записи очень больших целочисленных значений в компактной форме. Например, AD45 короче, чем его десятичный эквивалент 44357, и с увеличением значений разница в длине становится еще более заметной.

2. ASCII в Hex

Теперь давайте посмотрим на наши варианты преобразования значений ASCII в Hex:

  1. Преобразовать строку в массив символов

  2. Применить каждыйchar кint

  3. ИспользуйтеInteger.toHexString(), чтобы преобразовать его в Hex

Вот краткий пример того, как мы можем выполнить вышеуказанные шаги:

private static String asciiToHex(String asciiStr) {
    char[] chars = asciiStr.toCharArray();
    StringBuilder hex = new StringBuilder();
    for (char ch : chars) {
        hex.append(Integer.toHexString((int) ch));
    }

    return hex.toString();
}

3. Шестнадцатеричный формат в ASCII

Точно так же давайте сделаем преобразование формата Hex в ASCII в три этапа:

  1. Сократите значение Hex в 2char группах

  2. Преобразуйте его в целое число с основанием 16, используяInteger.parseInt(hex, 16), и приведите кchar

  3. Добавить все символы вStringBuilder

Давайте посмотрим на примере, как мы можем выполнить указанные выше шаги:

private static String hexToAscii(String hexStr) {
    StringBuilder output = new StringBuilder("");

    for (int i = 0; i < hexStr.length(); i += 2) {
        String str = hexStr.substring(i, i + 2);
        output.append((char) Integer.parseInt(str, 16));
    }

    return output.toString();
}

4. Test

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

@Test
public static void whenHexToAscii() {
    String asciiString = "www.example.com";
    String hexEquivalent =
      "7777772e6261656c64756e672e636f6d";

    assertEquals(asciiString, hexToAscii(hexEquivalent));
}

@Test
public static void whenAsciiToHex() {
    String asciiString = "www.example.com";
    String hexEquivalent =
      "7777772e6261656c64756e672e636f6d";

    assertEquals(hexEquivalent, asciiToHex(asciiString));
}

5. Заключение

В заключение мы рассмотрели простейшие способы преобразования между ASCII и Hex с использованием Java.

Реализацию всех этих примеров и фрагментов кода можно найти вin the github project - просто импортируйте проект и запускайте как есть.