2017-04-18 27 views
-2

打印十六进制字符串在Linux的shell在Linux shell中,如果我做perl -e "print '\x6f\xe3\xff\xff\xff\x7f' x 10",该出来说就是:如何使用Perl

\ 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 \ 0x7F部分\ x6f \ XE3 \ XFF \ XFF \ xff \ xfff

但是我需要的是ascii字符串\x6f\xe3\xff\xff\xff\x7f,怎么做到的?

回答

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的转换),但我养成了一起处理所有三个文件句柄的习惯。

+2

双引号字符串包含'qq',所以'perl -e'print qq(\ x6f \ xe3 \ xff \ xff \ xff \ x7f)x 10“'也可以。这在像Windows这样的平台上非常有用,单引号在命令行上不起作用。 – ephemient

+0

谢谢,这是有效的。 – Charles

+0

你应该解释一下'-CS',而不是把它当作咒语! – Borodin