可能重复:
Integer ASCII value to character in BASH using printfshell脚本 - 有没有办法将数字转换为char?
我想我的整数转换为ASCII字符
我们可以在Java转换是这样的:
int i = 97; //97 is "a" in ASCII
char c = (char) i; //c is now "a"
但,有没有办法做到这一点她会脚本?
可能重复:
Integer ASCII value to character in BASH using printfshell脚本 - 有没有办法将数字转换为char?
我想我的整数转换为ASCII字符
我们可以在Java转换是这样的:
int i = 97; //97 is "a" in ASCII
char c = (char) i; //c is now "a"
但,有没有办法做到这一点她会脚本?
#!/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()
它可以工作,但我想设置变量'var = $(printf \\ $(printf'%030'$ 1))'谢谢你的帮助。 – natrollus
所以你可以使用var = $(chr“$ 1”)。 FAQ页面已移至http://mywiki.wooledge.org/BashFAQ/071 –
谢谢@PeterCordes –
declare -i i=97
c=$(printf \\$(printf '%03o' $i))
echo "char:" $c
它的工作原理非常感谢 – natrollus
你能解释该部分'printf的\\ $(printf的 '%03o' $ I) '? – Boyang
@ CharlesW.'printf'%03o'$ i'从十进制转换为八进制('97' - >'141')。然后将它传给printf理解的“\\”(即'printf \\ 141')并打印八进制序列的字符。来自* info printf *:''printf'将FORMAT中的'\ OOO'解释为八进制数字(如果OOO是1到3个八进制数字),指定要打印的字符,'\ xHH'作为十六进制数字(如果HH是1到2个十六进制数字)指定要打印的字符。' –
非常感谢你的帮助 – natrollus