0

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

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);
4

1 回答 1

3

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

# 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;
}

如果你打包的字符串真的很长,这不是一个好主意,因为每次解包时它都必须复制字符串的“剩余”部分。

于 2013-06-21T07:55:59.377 回答