【问题标题】:perl print hex ascii from arg inputperl 从 arg 输入打印十六进制 ascii
【发布时间】:2016-06-10 21:09:50
【问题描述】:

我正在将一些十六进制 ascii 导入 perl,并希望使用它的打印功能将这些内容打印到文件中。但是十六进制不打印为 ascii,而是打印为普通字符串

echo "\x48\x32\x35\x45" "\x90\xc1\xe2\x7a" | perl -e' @string =  split " ",<>; print ${string[0]},chr(0),"$string[1]";' > input.txt 

这在 input.txt 中给出了以下内容

\x48\x32\x35\x45^@\x90\xc1\xe2\x7a

它应该看起来更像的地方

H25E^@<90><C1><E2>z

【问题讨论】:

  • 这是你想要的echo -en "\x48\x32\x35\x45 \x90\xc1\xe2\x7a"吗?甚至echo -en "\x48\x32\x35\x45 \x90\xc1\xe2\x7a" | cat -A
  • 0x7F 以上的任何字符代码都不是 ASCII。您是说希望小于 0x2o 的任何内容显示为 ^@ 等,大于 0x7E 的任何内容显示为 &lt;7F&gt;

标签: bash perl escaping hex ascii


【解决方案1】:

你需要evals(和额外的双引号)来让perl“解释”十六进制转义:

echo "\x48\x32\x35\x45 \x90\xc1\xe2\x7a" | perl -e '@string = split " ",<>; print eval "\"$string[0]\"",chr(0),eval "\"$string[1]\"";'

【讨论】:

    猜你喜欢
    • 2012-11-12
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    相关资源
    最近更新 更多