У вас есть куча шестнадцатеричных символов и вы хотите преобразовать их в читаемую десятичную систему (ASCII)?
Существует несколько способов преобразования шестнадцатеричных символов в ASCII в Linux. При необходимости вы также можете использовать эти способы в сценарии командной строки.
Преобразование шестнадцатеричной системы в ASCII в Linux
Шестнадцатеричная система счисления - это система счисления, в которой используется комбинация цифр (0-9) для представления значений от 0 до 9 и букв (A-F) для представления значений от 10 до 15.
Это может показаться сложным, но это все же лучше, чем двоичная система счисления, где все равно 1 и 0.
Несколько десятилетий назад шестнадцатеричная система широко использовалась в микроконтроллерах. Вы все еще можете увидеть его в использовании, особенно в цветовой палитре Hex, которая используется для представления различных оттенков цветов.
С другой стороны, ASCII означает American Standard Code for Information Interchange и имеет совершенно другое применение, чем шестнадцатеричная система. ASCII - это метод, который используется для преобразования символов обычного языка в двоичный, чтобы компьютеры могли понимать инструкции с нашей стороны.
В этом руководстве я расскажу о различных способах, с помощью которых вы сможете легко преобразовать шестнадцатеричный код в ASCII.
Рассмотрим следующий шестнадцатеричный код (постановка задачи), который я хочу преобразовать:
672d736f66742e696e666f
Если мне удастся преобразовать приведенный выше шестнадцатеричный код, преобразование ASCII должно выглядеть следующим образом:
g-soft.info
Использование команды xxd
xxd - это утилита командной строки, которая может создать шестнадцатеричный дамп из заданного текста и наоборот.
Сначала я собираюсь ввести шестнадцатеричную строку с помощью команды echo и соединить ее с xxd с помощью pipe.
1 | echo 672d736f66742e696e666f | xxd -r -p |
Здесь опция команды -r используется для преобразования шестнадцатеричного кода в ASCII, а -p - для печати обычного текста.
1 2 | $ echo 672d736f66742e696e666f | xxd -r -p g-soft.info |
Вывод выше смешивается с подсказкой в терминале, потому что преобразованный вывод не имеет символа новой строки. Чтобы сделать его более читабельным, вы можете добавить echo '' к приведенной выше команде.
1 | echo 672d736f66742e696e666f | xxd -r -p && echo '' |
Использование команды printf
Да, вы можете преобразовать шестнадцатеричный код в ASCII с помощью команды bash printf. Здесь я собираюсь использовать опцию \x, которая будет принимать на вход 1 или 2 цифры, как показано ниже:
1 | printf '\x67\x2d\x73\x6f\x66\x74\x2e\x69\x6e\x66\x6f' |
Нет никаких проблем, если в конце шестнадцатеричной строки будет одна цифра, и она будет работать нормально.
Использование команды dc
Возможно, вам интересно, как мы можем использовать калькулятор (dc) для преобразования hex в ASCII, и я покажу вам, как именно.
1 | echo "16i 672D736F66742E696E666F P" | dc |
Здесь 16i используется для указания того, что вы имеете дело с шестнадцатеричным радиксом, а P используется для печати вывода команды dc.
Используя приведенную выше команду, вы получите результат, аналогичный приведенному ниже
Использование команды Perl
Если в вашей системе установлен Perl, вы можете легко преобразовать hex в ASCII с помощью этого метода. Просто замените мой шестнадцатеричный код на ваш в приведенной команде и все.
1 | echo 672d736f66742e696e666f | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie' && echo '' |
И вы получите результаты, как показано ниже
Использование команды sed
Этот метод немного похож на описанный выше, но здесь вы используете sed для фильтрации и преобразования шестнадцатеричного кода в ASCII с помощью обычного выражения.
1 | echo -n 672d736f66742e696e666f| sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf && echo '' |
Используя конвейеризацию, мы собрали хэш-строку через echo, преобразовали ее с помощью sed в заданное выражение и получили результат в заданном виде.
Преобразование шестнадцатеричных строк, хранящихся в текстовом файле
Если у вас есть шестнадцатеричная строка, хранящаяся в текстовом файле, вы можете использовать этот метод для преобразования сохраненной шестнадцатеричной строки в ASCII.
Моя шестнадцатеричная строка хранится в файле hex.txt, поэтому для преобразования этой строки мне нужно выполнить следующую команду:
1 | cat hex.txt | xxd -r -p && echo '' |
Безусловно, это самый удобный способ, поскольку вам не придется вводить шестнадцатеричные строки снова и снова, а самое лучшее - вы можете хранить несколько шестнадцатеричных строк и преобразовывать их с помощью одной и той же команды.