Преобразование кода ASCII в шестнадцатеричный код в сценарии оболочки Unix - PullRequest
2 голосов
/ 27 августа 2010

Я хотел бы преобразовать ASCII-код (например, -, _, . и т. Д.) В шестнадцатеричное представление в оболочке Unix (без команды bc ). Например, - => %2d.

Как я могу это сделать?

Ответы [ 4 ]

9 голосов
/ 27 августа 2010

Работает в Bash, Dash (sh), ksh, zsh и ash и использует только встроенные функции:

Edit:

Вот версия ord, которая выводит в шестнадцатеричном формате, а chr принимает шестнадцатеричный ввод:

ordhex ()
{
    printf '%x' "'$1"
}

chrhex ()
{
    printf \\x"$1"
}

Оригинальные десятичные версии:

ord ()
{
    echo -n $(( ( 256 + $(printf '%d' "'$1"))%256 ))
}

Примеры (с добавлением новой строки):

$ ord ' '
32
$ ord _
95
$ ord A
65
$ ord '*'
42
$ ord \~
126

Вот соответствующий chr:

chr ()
{
    printf \\$(($1/64*100+$1%64/8*10+$1%8))
}

Примеры:

$ chr 125
}
$ chr 42
*
$ chr 0 | xxd
0000000: 00                                       .
$ chr 255 | xxd
0000000: ff                                       .
1 голос
/ 27 августа 2010
perl -e 'print ord("_"), "\n"'
0 голосов
/ 27 сентября 2014

В ksh-версии, которую я использую, работает:

chr ()
{
    printf \\x$1
}
0 голосов
/ 29 августа 2010

python -c 'import sys; выведите "{0: 02x}". формат (ord (sys.argv [1])) '' _ '

или

python -c 'print "{0: 02x}". Format (ord ("_"))'

Я согласен, что это не самый приятный однострочный текст, но я не удержался, увидев ответ на основе Perl.

...