将字符串转换为编码的十六进制

Convert string to encoded hex

不太确定这里进行的操作,但是当我转到 http://codebeautify.org/string-hex-converter 并输入 1yS9$dNc 时,我看到输出:3179533924644e63.

在bash我做:

printf "1yS9$dNc" | xxd
0000000: 3179 5339                                1yS9

从手册页中,我了解到 xxd 创建给定文件或标准输入的十六进制转储

我的问题:

  1. 我可以使用 Bash 从 codebeautify 获得相同的输出吗(即从 1yS9$dNc3179533924644e63)。
  2. codebeautify 对此编码有何不同?

您需要使用引号。比较:

$ printf "1yS9$dNc" | xxd
0000000: 3179 5339                                1yS9

与:

$ printf '1yS9$dNc' | xxd
0000000: 3179 5339 2464 4e63                      1yS9$dNc

您的 xxd 输出较短的原因是 shell 将 $dNc 的值扩展为空字符串。因此,xxd 看到的唯一字符是 1yS9。相反,如果您使用单引号,shell 不会展开任何内容。

在双引号内,shell 执行 (1) 变量扩展,(2) 命令替换,(3) 算术扩展。如果你想要那些,使用双引号,如果你不使用单引号。

格式化选项

要使输出看起来更像代码美化,请使用 -g 0:

$ printf '1yS9$dNc' | xxd -g 0
0000000: 3179533924644e63                  1yS9$dNc

或者,更好的是,使用 -plain:

$ printf '1yS9$dNc' | xxd -plain
3179533924644e63

将结果保存在变量中

如果目标是将十六进制值放入 shell 变量中,那么 bash:

$ printf -v var "%s" $(xxd -p <<<'1yS9$dNc')
$ echo $var
3179533924644e630a

帽子提示:David C. Rankin