将字符串转换为编码的十六进制
Convert string to encoded hex
不太确定这里进行的操作,但是当我转到 http://codebeautify.org/string-hex-converter 并输入 1yS9$dNc
时,我看到输出:3179533924644e63
.
在bash我做:
printf "1yS9$dNc" | xxd
0000000: 3179 5339 1yS9
从手册页中,我了解到 xxd 创建给定文件或标准输入的十六进制转储。
我的问题:
- 我可以使用 Bash 从 codebeautify 获得相同的输出吗(即从
1yS9$dNc
到 3179533924644e63
)。
- 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
不太确定这里进行的操作,但是当我转到 http://codebeautify.org/string-hex-converter 并输入 1yS9$dNc
时,我看到输出:3179533924644e63
.
在bash我做:
printf "1yS9$dNc" | xxd
0000000: 3179 5339 1yS9
从手册页中,我了解到 xxd 创建给定文件或标准输入的十六进制转储。
我的问题:
- 我可以使用 Bash 从 codebeautify 获得相同的输出吗(即从
1yS9$dNc
到3179533924644e63
)。 - 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