我想在Unix Shell中以十六进制表示形式转换ASCII代码(如-
,_
,.
等)(不带bc命令)。例如,-
=> %2d
。
我该怎么做?
最佳答案
这适用于Bash,Dash(sh),ksh,zsh和ash,并且仅使用内置函数:
编辑:
这是ord的一种版本,以hex和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 .