在 UNIX shell 脚本中将 ascii 代码转换为十六进制

Oli*_*VAL 8 shell bash

我想在 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)


Pet*_*r.O 6

xxd是一个十六进制转储实用程序,作为vim-common软件包的一部分提供
\n它有一个方便的-p选项,可以输出连续的“plain/postscript”十六进制转储样式。这可以通过-r...轻松反转...-u将输出大写的十六进制数字。

\n
$ 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


Cri*_*itu 5

尝试

$ echo -n "-_." | od -A n -t x1
2d 5f 2e
Run Code Online (Sandbox Code Playgroud)

-A n表示不打印偏移量,-t x1表示将输出格式化为 1 字节十六进制整数。

  • 好的。您可以使用“echo -n”省略末尾的换行符,这样“od”就不会拾取它并将其转换为“0a” (2认同)