2012-07-04 39 views
-1

例如,我有一个字符串"\x80\x81\x82.abc\x00",那么它应该转换为十六进制8081822e61626300。我可以问一下在Perl中如何做到这一点?如何在Perl中将包含十六进制的字符串转换为十六进制?

+0

这样 – chao

+0

你的代码我的代码是像什么? [编辑您的问题](http://stackoverflow.com/posts/11325844/edit)将代码放入。(请参阅[常见问题](http://stackoverflow.com/faq#howtoask))。 – simbabque

回答

0

unpack 'H*'可能是最好的解决办法:

$ perlsh 
eval: unpack "H*", "\x80\x81\x82.abc\x00" 
'8081822e61626300' 
+0

是的,如果你直接在解压缩时输入字符串,那么你会得到正确的结果,但在我这里,我使用var,就像$ string =“\ x80 \ x81 \ x82.abc \ x00”,然后输出是不正确的,它将单个字符(例如“\”,“x”,“8”,“0”)转换为十六进制,而不是“\ x80”,这正是我所期望的。 – chao

+1

@chao:查看@Ωmega的答案。他有两种可能性。 Perl中的''''和'''有区别,'''把'\ x80'变成十六进制,而'''把它作为一个字符串。 – simbabque

3

你有串"\x80\x81\x82.abc\x00"'\x80\x81\x82.abc\x00'

选项1:

my $text = "\x80\x81\x82.abc\x00"; 
$text = unpack "H*", $text; 
print $text; 

选项2:

my $text = '\x80\x81\x82.abc\x00'; 
$text =~ s/\\x([a-zA-Z\d]{2})/{chr hex $1}/ge; 
$text = unpack "H*", $text; 
print $text; 
+0

非常感谢。 option2工作:) – chao

相关问题