Как преобразовать шестнадцатеричные символы в символы ASCII в оболочке Linux? - PullRequest
56 голосов
/ 22 октября 2009

Допустим, у меня есть строка 5a.

Это шестнадцатеричное представление буквы ASCII Z.

Мне нужно знать команду оболочки Linux, которая будет принимать шестнадцатеричную строку и выводить символы ASCII, которые представляет строка.

Так что если я сделаю:

echo 5a | command_im_looking_for

Я увижу одиночное письмо Z:

Z

Ответы [ 12 ]

0 голосов
/ 12 ноября 2017

Аналогично моему ответу здесь: Сценарии оболочки Linux: шестнадцатеричное число в двоичной строке

Вы можете сделать это тем же инструментом, как этот (используя печатный символ ascii вместо 5a):

echo -n 616263 | cryptocli dd -decoders hex

даст следующий результат:

abcd
0 голосов
/ 12 мая 2014

GNU awk 4.1

awk -niord '$0=chr("0x"RT)' RS=.. ORS=

Обратите внимание, что если вы откликнетесь на это, он выдаст дополнительный нулевой байт

$ echo 595a | awk -niord '$0=chr("0x"RT)' RS=.. ORS= | od -tx1c
0000000  59  5a  00
          Y   Z  \0

Вместо этого используйте printf

$ printf 595a | awk -niord '$0=chr("0x"RT)' RS=.. ORS= | od -tx1c
0000000  59  5a
          Y   Z

Также обратите внимание, что GNU awk выдает UTF-8 по умолчанию

$ printf a1 | awk -niord '$0=chr("0x"RT)' RS=.. ORS= | od -tx1
0000000 c2 a1

Если вы имеете дело с персонажами вне ASCII, и вы собираетесь Base64 кодируя результирующую строку, вы можете отключить UTF-8 с помощью -b

echo 5a | sha256sum | awk -bniord 'RT~/\w/,$0=chr("0x"RT)' RS=.. ORS=
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...