在Unix shell脚本中将ASCII代码转换为十六进制
我想在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" } 原始十进
-
,-
,
,等等)(不带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
}