如何使用Perl binmode打印出一个文本的十六进制内容?

时间:2016-03-04 15:41:30

标签: perl binmode

有人可以告诉我Perl中的 binmode 如何用来实现跟随单行的相同功能,以便打印出一个文本的十六进制数据?

$ perl -nle 'print map {sprintf "%02X",ord} split //'

例如,如果我输入" abcABC",则输出将为" 616263414243"。

请使用binmode提供类似的单行。

感谢。

3 个答案:

答案 0 :(得分:0)

按照你的要求行事{p> binmode毫无用处。目前没有PerlIO层将所有输出字节转换为0A到它们的ASCII十六进制表示。

答案 1 :(得分:0)

您是否在程序中询问如何执行此操作?默认输入模式与Linux上的binmode相同,在Windows上,唯一的区别是每个CR LF都转换为LF。

所以你可以安全地写这个。

while (<>) {
    chomp;
    printf '%02X, $_ for split //;
    print "\n";
}

条件是如果使用Windows版本的perl读取Windows文件,CR字符将消失

答案 2 :(得分:0)

我不明白你对使用binmode的坚持,但也许这就是你的意思?

perl -le 'print map { sprintf q{%02X}, ord } split //, shift' abcABC

输出

616263414243