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

在Unix shell脚本中将ASCII代码转换为十六进制,unix,shell,ascii,hex,Unix,Shell,Ascii,Hex,我想在Unix shell中以十六进制表示形式转换ASCII码(如-,-,,等等)(不带bc命令)。例如,-=>%2d 如何操作?这在Bash、Dash(sh)、ksh、zsh和ash中工作,并且只使用内置的: perl -e 'print ord("_"), "\n"' 编辑: 以下是以十六进制输出的ord版本和接受十六进制输入的chr版本: ordhex () { printf '%x' "'$1" } chrhex () { printf \\x"$1" } 原始十进

我想在Unix shell中以十六进制表示形式转换ASCII码(如
-
-
,等等)(不带bc命令)。例如,
-
=>
%2d

如何操作?

这在Bash、Dash(sh)、ksh、zsh和ash中工作,并且只使用内置的:

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

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

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

chrhex ()
{
    printf \\x"$1"
}
原始十进制版本:

ord ()
{
    echo -n $(( ( 256 + $(printf '%d' "'$1"))%256 ))
}
示例(添加了换行符):

以下是相应的
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                                       .
python-c的导入系统;打印“{0:02x}”。格式(ord(sys.argv[1]))“”

python-c'打印“{0:02x}”.format(ord(“”))


我同意这不是最好的一行,但在看到基于Perl的答案后,我忍不住要说出来。

以下内容在我使用的ksh版本中有效:

chr ()
{
    printf \\x$1
}

能否使用
sed
/
awk
/
perl
等?请仅使用sed或bash/sh shell;)但是ord函数给了我十进制值,我想要ascii码的十六进制值,谢谢你的帮助,我将在unpack:perl-e'print unpack(“H*”,“-”,“\n”中使用这个表达式
chr ()
{
    printf \\x$1
}