2012-10-12 115 views

回答

14
#!/bin/bash 
# chr() - converts decimal value to its ASCII character representation 
# ord() - converts ASCII character to its decimal value 

chr() { 
    printf \\$(printf '%03o' $1) 
} 

ord() { 
    printf '%d' "'$1" 
} 

ord A 
echo 
chr 65 
echo 

编辑:

正如你看到的ORD()是一个有点棘手 - 把一个单引号中的一个整数的前面。

单一UNIX标准:“如果开头的字符是 单引号或双引号,该值应是 数值以下单引号或 双字符的底层代码集-引用。” 看到printf()

(从http://mywiki.wooledge.org/BashFAQ/071拍摄)

+0

它可以工作,但我想设置变量'var = $(printf \\ $(printf'%030'$ 1))'谢谢你的帮助。 – natrollus

+1

所以你可以使用var = $(chr“$ 1”)。 FAQ页面已移至http://mywiki.wooledge.org/BashFAQ/071 –

+0

谢谢@PeterCordes –

6
declare -i i=97 
c=$(printf \\$(printf '%03o' $i)) 
echo "char:" $c 
+0

它的工作原理非常感谢 – natrollus

+0

你能解释该部分'printf的\\ $(printf的 '%03o' $ I) '? – Boyang

+0

@ CharlesW.'printf'%03o'$ i'从十进制转换为八进制('97' - >'141')。然后将它传给printf理解的“\\”(即'printf \\ 141')并打印八进制序列的字符。来自* info printf *:''printf'将FORMAT中的'\ OOO'解释为八进制数字(如果OOO是1到3个八进制数字),指定要打印的字符,'\ xHH'作为十六进制数字(如果HH是1到2个十六进制数字)指定要打印的字符。' –

相关问题