我想将 ASCII 代码(如-
or_
或.
等)转换为 Unix shell 中的十六进制表示形式(无需bc
命令),例如 : -
=> %2d
。
有任何想法吗?
答案1
有一个printf
模拟C函数的工具;通常它位于/usr/bin/printf
,但是很多 shell 也为其实现了内置函数。您可以使用它%02x
来获取字符的十六进制表示形式,但需要确保传递的字符串包含单引号中的字符 (编辑:事实证明只需在开头加一个单引号就足够了):
printf "%%%02x\n" "'-" # Outputs %2d
为了方便起见,您可以创建一个 shell 函数:
function hex() {
printf "%%%02x\n" "'$1"
}
hex - # Outputs %2d
hex _ # Outputs %5f
hex . # Outputs %2e
答案2
xxd
vim-common
是作为包的一部分提供的十六进制转储实用程序
它有一个方便的选项,可以输出连续的“plain/postscript”十六进制转储样式。这可以通过...-p
轻松反转...将输出大写的十六进制数字。-r
-u
$ echo -n "M" |xxd -p # 1 ASCII char= 1 UTF-8 byte; Unicode Codepoint: U+0041
4d
$ echo -n "〶" |xxd -p -u # 1 CJK char= 3 UTF-8 bytes; Unicode Codepoint: U+3036
E380B6
$ echo -n "Dump a string" |xxd -p -u
44756D70206120737472696E67
$ echo -n "Dump and Revert" |xxd -p |xxd -r
Dump and Revert