获取 Perl 打包/解包模板的元素数量

Posted

技术标签:

【中文标题】获取 Perl 打包/解包模板的元素数量【英文标题】:Get the number of elements for a Perl pack/unpack template 【发布时间】:2019-07-01 23:51:54 【问题描述】:

给定 packunpack 函数的模板字符串,是否有一种简单的方法来确定 pack 预期的附加参数的最小数量,和/或将返回的值的最小数量一个成功的unpack

例如:

unpack_element_count("vVC16a16") => 19 # a16 gives one string
pack_element_count("(VVVvx4)2")  => 8  # x4 ignored, 4*2
pack_element_count("v*")         => 0

$count =()= unpack($template, ""); 听起来不太好,因为the documentation for unpack 在尝试解压缩太短的字符串时说,“结果定义不明确”。我想我可以传递一个包含大量零字节的字符串,但这听起来效率很低,并且可能对某些更高级的模板无效?

如果有帮助,我实际上主要对具有固定元素计数的模板感兴趣,这意味着没有 * 计数,没有 / 前缀计数在数据格式等。所以回答这个有限的情况会有所帮助;对更一般情况(变量计数的最小值)的答案会很有趣。

【问题讨论】:

Re "我想我可以传递一个包含大量零字节的字符串",这不适用于(a)* 【参考方案1】:

没有提供执行此操作的内置工具。

我怀疑 CPAN 上是否存在某些内容,但请随时搜索那里是否有可以帮助您的内容。 (模块建议是题外话。)

【讨论】:

以上是关于获取 Perl 打包/解包模板的元素数量的主要内容,如果未能解决你的问题,请参考以下文章

Perl 打包/解包/移位

如何在 Perl 中使用“打包/解包”?

Perl 打包/解包和二进制字符串的长度

Perl 中的解包功能要求

Perl 中字符串的最快校验位例程是啥?

用 Perl 解压不均匀数量的字节