打包/解包二进制数据数组

4

我有一个无符号整数(32位)的数组,我想要将它们打包成二进制流:

my @n = (4,8,15,16,23,42);
my $foo = join('', map(pack('I', $_), @n)); # Ugly, isn't?

$foo应该包含这个二进制流(根据字节序)

0000000 0000 0004 0000 0008 0000 000F 0000 0010
0000010 0000 0017 0000 002A

然后我想解包二进制流到一个数组中。

如何使用Perl正确地完成,如果可能的话只使用内置模块?


2
变量 $a$b 保留用于 sort 块中,使用它们进行其他操作被认为是不良实践。 - simbabque
好主意!我会使用 $foo $bar :) - nowox
去掉不必要的括号也会有所帮助。join '', map pack('L', $_), @nums; - ikegami
1个回答

7
你所需要的是:
my $packed = pack('I*', @nums);   # unsigned int (varies in size)
my $packed = pack('L*', @nums);   # uint32_t

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接