我正试着拿一根绳子,让我们说" 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"'
但是我无法弄清楚如何制作这些小组。你能帮忙吗?
答案 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}}