Перейти к основному содержимому

Преобразование Hex в ASCII в Java

· 2 мин. чтения

1. Обзор

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

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

2. ASCII в шестнадцатеричный

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

  1. Преобразование строки в массив символов
  2. Приведите каждый символ к int
  3. Используйте Integer.toHexString() , чтобы преобразовать его в шестнадцатеричный

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

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. Вырезать шестнадцатеричное значение в 2 группах символов
  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
public static void whenHexToAscii() {
String asciiString = "www.foreach.com";
String hexEquivalent =
"7777772e6261656c64756e672e636f6d";

assertEquals(asciiString, hexToAscii(hexEquivalent));
}

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

assertEquals(hexEquivalent, asciiToHex(asciiString));
}

5. Вывод

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

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