我想在 Unix shell(没有命令)中将ASCII 代码(如-
or_
或.
等)转换为十六进制表示bc
,例如 : -
=> %2d
。
有任何想法吗?
Mic*_*zek 14
有一个printf
工具可以模拟 C 函数;通常它在/usr/bin/printf
,但很多 shell 也为它实现了内置函数。您可以使用%02x
获取字符的十六进制表示,但您需要确保传递一个包含单引号字符的字符串(编辑:事实证明,在开头只使用单引号就足够了):
printf "%%%02x\n" "'-" # Outputs %2d
Run Code Online (Sandbox Code Playgroud)
为方便起见,您可以创建一个 shell 函数:
function hex() {
printf "%%%02x\n" "'$1"
}
hex - # Outputs %2d
hex _ # Outputs %5f
hex . # Outputs %2e
Run Code Online (Sandbox Code Playgroud)
xxd
是一个十六进制转储实用程序,作为vim-common
软件包的一部分提供
\n它有一个方便的-p
选项,可以输出连续的“plain/postscript”十六进制转储样式。这可以通过-r
...轻松反转...-u
将输出大写的十六进制数字。
$ echo -n "M" |xxd -p # 1 ASCII char= 1 UTF-8 byte; Unicode Codepoint: U+0041\n4d\n\n$ echo -n "\xe3\x80\xb6" |xxd -p -u # 1 CJK char= 3 UTF-8 bytes; Unicode Codepoint: U+3036 \nE380B6\n\n$ echo -n "Dump a string" |xxd -p -u \n44756D70206120737472696E67\n\n$ echo -n "Dump and Revert" |xxd -p |xxd -r \nDump and Revert\n
Run Code Online (Sandbox Code Playgroud)\n
尝试从:
$ echo -n "-_." | od -A n -t x1
2d 5f 2e
Run Code Online (Sandbox Code Playgroud)
-A n
表示不打印偏移量,-t x1
表示将输出格式化为 1 字节十六进制整数。