Perl包整数

时间:2014-12-02 10:59:03

标签: perl binary pack

考虑这个值:

my $value = hex('0x12345678');

我希望我的hexdump像这样(相同的位顺序):

0000000 1234 5678

我使用了这种方法,但它混淆了我的价值:

open(my $out, '>:raw', 'foo') or die "Unable to open: $!";     
print $out pack('l', $value);  # Test in little endian
print $out pack('l>', $value); # Test in big endian

这是我得到的:

0000000 5678 1234 3412 7856

如何按顺序获取这些位?

修改

所以问题可能来自我的hexdump,因为我得到了与建议答案相同的输出。

$ perl -e 'print pack $_, 0x12345678 for qw( l> N )' | hexdump
0000000 3412 7856 3412 7856

我使用hexdump -C获得了正确的结果:

$ perl -e 'print pack $_, 0x12345678 for qw( l> N )' | hexdump -C
00000000  12 34 56 78 12 34 56 78                           |.4Vx.4Vx|

我在这里找到了解释: hexdump confusion

1 个答案:

答案 0 :(得分:3)

'l>'选项适用于我(请注意,虽然没有调用hex)。此外,N作为模板有效:

perl -e 'print pack $_, 0x12345678 for qw( l> N )' | xxd
0000000: 1234 5678 1234 5678