Perl将字符串转换为8个十六进制数字的组

时间:2013-12-03 03:10:45

标签: perl

我正试着拿一根绳子,让我们说" asdkljasdkjlaksjdla"和

1. Print it in reverse order
2. convert it to hex
3. print in groups of 8 with leading 0x

例如字符串" asdkljasdkjlaksjdla"应打印出像

0x616c646a
0x736b616c
0x6a6b6473

等等。

到目前为止,我有这个:

perl -e 'print unpack "H*", scalar reverse "asdkljasdkjlaksjdla"'

但是我无法弄清楚如何制作这些小组。你能帮忙吗?

3 个答案:

答案 0 :(得分:4)

您可以使用unpack "(H8)*"

一步完成十六进制转换和拆分
print "0x$_\n" for unpack "(H8)*", scalar reverse "asdkljasdkjlaksjdla";

有关此语法的详细信息,请参阅perlpacktut

(Ps。严格来说,scalar是不必要的,因为unpack已经在标量上下文中评估了它的第二个参数。我宁愿明确地将它放在那里,以便下一个人阅读或编辑此内容不必记住该细节。如果您不同意,请随意将其删除。)

答案 1 :(得分:0)

perl -E 'my $x= unpack "H*", scalar reverse "asdkljasdkjlaksjdla" ; say "0x$_" for ( $x =~ /(.{1,8})/g ) '

需要另一个paren,并且没有温度就得到它:

perl -E 'say "0x$_" for ( ( unpack "H*", scalar reverse "asdkljasdkjlaksjdla" ) =~ /(.{1,8})/g )'

答案 2 :(得分:0)

如果您使用Perl 5.14.0或更高版本(s///修饰符需要perl -e 'print ((unpack "H*", reverse "asdkljasdkjlaksjdla") =~ s/.{2,8}/0x$&\n/gr)' ):

0x616c646a
0x736b616c
0x6a6b6473
0x616a6c6b
0x647361

所有空间都是可选的;所有的括号都是必要的。

输出:

{{1}}