0

谁能告诉我如何使用 Perl 中的binmode来实现跟单行一样的功能,从而打印出一个文本的十六进制数据?

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

例如,如果我输入“abcABC”,输出将是“616263414243”。

请使用 binmode 给出类似的单线。

谢谢。

4

3 回答 3

0

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

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

输出

616263414243
于 2016-03-04T15:56:01.983 回答
0

您是在问如何从程序中做到这一点?默认输入模式与 Linux 上的相同binmode,而在 Windows 上,唯一的区别是每个 CR LF 都转换为 LF。

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

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

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

于 2016-03-04T15:48:16.083 回答
0

binmode按照你的要求做是没有用的。目前没有 PerlIO 层可以将所有输出字节转换0A为它们的 ASCII 十六进制表示。

于 2016-03-04T15:46:16.710 回答