谁能告诉我如何使用 Perl 中的binmode来实现跟单行一样的功能,从而打印出一个文本的十六进制数据?
$ perl -nle 'print map {sprintf "%02X",ord} split //'
例如,如果我输入“abcABC”,输出将是“616263414243”。
请使用 binmode 给出类似的单线。
谢谢。
我不明白你坚持使用binmode
,但也许这就是你的意思?
perl -le 'print map { sprintf q{%02X}, ord } split //, shift' abcABC
616263414243
您是在问如何从程序中做到这一点?默认输入模式与 Linux 上的相同binmode
,而在 Windows 上,唯一的区别是每个 CR LF 都转换为 LF。
所以你可以安全地写这个。
while (<>) {
chomp;
printf '%02X, $_ for split //;
print "\n";
}
附带条件是,如果您正在使用 Windows 版本的 perl 读取 Windows 文件,CR 字符将消失
binmode
按照你的要求做是没有用的。目前没有 PerlIO 层可以将所有输出字节转换0A
为它们的 ASCII 十六进制表示。