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

时间:2015-10-04 05:39:03

标签: bash hex

对此处的操作不太确定,但当我转到http://codebeautify.org/string-hex-converter并输入1yS9$dNc时,我会看到输出:3179533924644e63

在bash我做:

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

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

我的问题:

  1. 我可以使用Bash从codebeautify获取相同的输出(即从1yS9$dNc转到3179533924644e63)。
  2. codebeautify如何以不同的方式编码?

1 个答案:

答案 0 :(得分:2)

您需要使用单个引号。比较:

$ 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)算术扩展。如果你想要那些,请使用双引号,如果你不使用单引号。

格式化选项

要使输出看起来更像codebeautify,请使用-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