0

我有一个结构,其中包含:

struct mystruct{
  int                id[10];
  char               text[40];
  unsigned short int len;
};

我试图在一行中解压缩它,如下所示:

  my(@ids,$text,$length) = unpack("N10C40n",$buff) ;

但是一切都将进入第一个数组(@ids),我已经尝试过模板作为“ N10 C40 n”和“ (N10)(C40)(n)”所以,要么这不能完成,要么我没有使用正确的模板字符串。

注意:我使用的是大端数据。

有什么提示吗?

4

2 回答 2

7

在列表分配中,第一个数组或哈希将吃掉所有东西(它怎么知道在哪里停止?)。试试这个:

my @unpacked        = unpack "N10Z40n", $buff;
my @ids             = @unpacked[0 .. 9];
my ($text, $length) = @unpacked[10, 11];

你也可以说

my @ids;
(@ids[0 .. 9], my ($text, $length)) = unpack "N10Z40n", $buff;
于 2009-07-22T13:07:07.317 回答
1

如果顺序@ids无关紧要:

my ($length, $text, @ids) = reverse unpack("N10C40n",$buff) ;
于 2009-07-22T14:55:40.713 回答