如何获取unpack消耗的字节数

时间:2013-06-21 06:08:39

标签: perl unpack

有没有办法获得“解包”调用“消耗”的字节数?   我只想通过几个步骤从长字符串中解析(解包)不同的结构,如下所示:

my $record1 = unpack "TEMPLATE", substr($long_str, $pos);

# Advance position pointer
$pos += NUMBER_OF_BYTES_CONSUMED_BY_LAST_UNPACK();

# Other codes that might determin what to read in following steps
# ...

# Read again at the new position
my $record2 = unpack "TEMPLATE2", substr($long_str, $pos);

1 个答案:

答案 0 :(得分:3)

unpack这似乎是一个明显的遗漏,不是吗?作为安慰奖,您可以在解包模板的末尾使用a*来返回输入字符串的未使用部分。

# The variable-length "w" format is to make the example slightly more interesting.
$x = pack "w*", 126..129;
while(length $x) {
    # unpack one number, keep the rest packed in $x
    ($n, $x) = unpack "wa*", $x;
    print $n;
}

如果你的打包字符串非常长,这不是一个好主意,因为每次你打开包装时它必须复制字符串的“余数”部分。