我有一个包含的结构:
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)
“
所以,要么这不能做,要么我没有使用正确的模板字符串。
注意:我正在使用大端数据。
任何提示?
答案 0 :(得分: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;
答案 1 :(得分:1)
如果@ids
的顺序无关紧要:
my ($length, $text, @ids) = reverse unpack("N10C40n",$buff) ;