在Unix shell脚本中将ASCII代码转换为十六进制

Oli*_*VAL 2 unix shell hex ascii

我想转换成ASCII码(如-,_,.,等)在十六进制中的Unix shell表示(公元前没有命令).例如,-=> %2d.

我该怎么做?

Pau*_*ce. 9

这适用于Bash,Dash(sh),ksh,zsh和ash,仅使用内置函数:

编辑:

这是一个以十六进制和chr输出的ord版本,它接受十六进制输入:

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

chrhex ()
{
    printf \\x"$1"
}
Run Code Online (Sandbox Code Playgroud)

原始十进制版本:

ord ()
{
    echo -n $(( ( 256 + $(printf '%d' "'$1"))%256 ))
}
Run Code Online (Sandbox Code Playgroud)

示例(添加换行符):

$ ord ' '
32
$ ord _
95
$ ord A
65
$ ord '*'
42
$ ord \~
126
Run Code Online (Sandbox Code Playgroud)

这是相应的chr:

chr ()
{
    printf \\$(($1/64*100+$1%64/8*10+$1%8))
}
Run Code Online (Sandbox Code Playgroud)

例子:

$ chr 125
}
$ chr 42
*
$ chr 0 | xxd
0000000: 00                                       .
$ chr 255 | xxd
0000000: ff                                       .
Run Code Online (Sandbox Code Playgroud)