在 C 中,printf ("%2X\n", 'A');
打印41
。
在 bash 中,printf "%2X\n" 'A'
打印bash: printf: A: invalid number
。
我怎样才能像在C 中那样41
使用 进行打印?printf
bash
请不要建议使用外部工具,od
因为这太慢了:我正在寻找一种 bash 内部方法。
答案1
在printf
在 bash 手册中,你会发现:
论据非字符串格式说明符被视为 C 语言常量,但允许使用前导加号或减号,并且如果前导字符是单引号或双引号,则该值为后续字符的 ASCII 值。
(我强调)
这些 shell 函数封装了 char_to_hex 和 hex_to_char。函数名来自 perl
# ord: the ascii value of a character
# $ ord "A" #=> 65
#
ord() {
printf "%d" "\"$1"
}
# chr: the character represented by the given ASCII decimal value
# $ chr 65 #=> A
#
chr() {
printf "\x$(printf "%x" "$1")"
}
然后:
$ ord A
65
$ printf '%02X\n' "$(ord A)"
41
答案2
虽然很短,但@Juergen 评论说这回答了他的问题。使用以下内容:
printf "%X\n" \"A\"
注意,这提供了单字节(“ASCII”,UTF-8)字符代码。请参阅Unix 和 Linux StackExchange有关 char -> hex 值和逆 hex -> char 的更多信息,请使用 bash shell 和/或 python。