如何用perl在linux shell中打印十六进制字符串

时间:2017-04-18 05:03:56

标签: perl

在linux shell中,如果我perl -e "print '\x6f\xe3\xff\xff\xff\x7f' x 10",则输出为:

  

\ x6f \ XE3 \ XFF \ XFF \ XFF \ 0x7F部分\ x6f \ XE3 \ XFF \ XFF \ XFF \ 0x7F部分\ x6f \ XE3 \ XFF \ XFF \ XFF \ 0x7F部分\ x6f \ XE3 \ XFF \ XFF \ XFF \ 0x7F部分\ x6f \ XE3 \ XFF \ XFF \ XFF \ 0x7F部分\ x6f \ XE3 \ XFF \ XFF \ XFF \ 0x7F部分\ x6f \ XE3 \ XFF \ XFF \ XFF \ 0x7F部分\ x6f \ XE3 \ XFF \ XFF \ XFF \ 0x7F部分\ x6f \ xe3 \ xff \ xff \ xff \ x7f \ x6f \ xe3 \ xff \ xff \ xff \ x7f

但我需要的是\x6f\xe3\xff\xff\xff\x7f的ascii字符串,如何制作呢?

1 个答案:

答案 0 :(得分:3)

\x6f之类的转义序列仅在双引号字符串中展开。你有一个单引号字符串。在示例中反转引号的使用(我还添加了-CS以使字符正确打印):

$ perl -CS -e 'print "\x6f\xe3\xff\xff\xff\x7f" x 10'
oãÿÿÿoãÿÿÿoãÿÿÿoãÿÿÿoãÿÿÿoãÿÿÿoãÿÿÿoãÿÿÿoãÿÿÿoãÿÿÿ

更新: perlrun manual page解释了各种Perl命令行开关。

-C开关控制各种Unicode功能。 -CS是告诉Perl三个标准文件句柄(STDIN,STDOUT和STDERR)应被视为提供或期望UTF8编码数据流的快速方法。这意味着从STDIN读取的任何内容都将从UTF8解码为Perl字符,发送到STDOUT或STDERR的任何内容都将从Perl字符编码为UTF8。在这种情况下,我只需要-CI(仅将该转换应用于STDOUT),但我养成了一起处理所有三个文件句柄的习惯。