我想在十六进制中转换 ASCII码(例如-
,_
,.
等)在Unix shell中表示(没有bc命令)。例如,-
=> %2d
。
我该怎么做?
答案 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
}