我在XORing,($a ^= $b)
,字符串,并且必须将它们表示为十六进制数字。我可以使用sprintf
执行此操作,但如果可能,我更喜欢使用pack('H*', ...)
。我已打包测试代码,用于表达嵌入式注释的问题。谁能解释为什么pack('H*', ...)
语句失败了?谢谢和问候。
use strict;
my @a = qw(a b c d e f g h);
print "@a\n";
my @b = map ord, @a;
foreach (@b) { print "$_\n" };
print scalar(@b), "\n";
my $pad = pack('H*', @b); # why doesn't this work????
print "\$pad after pack('H*', \@b) = $pad \t\t # garbage :-(\n";
print length($pad), "\n";
$pad = pack('C*', @b);
print "\$pad after pack('C*', \@b) = $pad \t # correct\n";
$pad =~ s/(.)/sprintf("%x",ord($1))/eg;
print "\$pad after sprintf() = $pad\t # correct :-)\n";
exit(0);
再次感谢。
答案 0 :(得分:3)
您真正想要的结果是什么?
H
的{{1}}模板需要十六进制字符串,并返回由这些十六进制代码点处的字符组成的字符串。因此pack
将为您提供pack 'H*', '414243'
猜测你想要反过来,所以像这样使用ABC
unpack
<强>输出强>
my @a = qw(a b c d e f g h);
say unpack 'H*', join '', @a;