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

时间:2010-08-27 15:34:19

标签: unix shell ascii hex

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

我该怎么做?

4 个答案:

答案 0 :(得分:9)

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

修改

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

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 :(得分:1)

perl -e 'print ord("_"), "\n"'

答案 2 :(得分:0)

  

python -c'import sys;打印“{0:02x}”。format(ord(sys.argv [1]))''_'

  

python -c'print“{0:02x}”。format(ord(“_”))'

我同意这不是最好的单行,但在看到基于Perl的答案后我无法抗拒。

答案 3 :(得分:0)

以下适用于我正在使用的ksh版本:

chr ()
{
    printf \\x$1
}