Perl 中的“打包”函数

Posted

技术标签:

【中文标题】Perl 中的“打包”函数【英文标题】:The 'pack' function in Perl 【发布时间】:2013-12-19 06:49:26 【问题描述】:

我的 Perl 程序:

say 'Hexadecimal notation in a Perl script';
my$str = pack 'H*', '987456123';
print unpack('H*', $str), "\n";
print unpack('h*', $str), "\n";

输出:

Hexadecimal notation in a Perl script
1. 9874561230 # Why is it showing zero here?
2. 8947652103

在我的1 结果中,为什么它显示为零?这是什么原因?

【问题讨论】:

【参考方案1】:

987456123 中的字符数为奇数,H* 包装要求偶数,因此最后一对(9874561230 假设为零最后)。

来自perldoc:

从模板开始到pack(),每对字符转换为1个字符输出。 [...] 如果输入字符串的长度不是偶数,它的行为就像在末尾用空字符填充一样。同样,“额外”的 nybbles 在解包过程中会被忽略。

【讨论】:

谢谢你澄清我的疑问 有时我们使用H*,有时使用*H。为什么我们这样使用。这些有什么区别?请告诉我 @OlegG, "If the length of the input string is not even, it behaves as if padded by a null character at the end."

以上是关于Perl 中的“打包”函数的主要内容,如果未能解决你的问题,请参考以下文章

Perl 打包/解包/移位

Qt 等效于 Perl 打包/解包

为啥 Perl 对跨平台打包结构的访问不适用于 SWIG?

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

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

如何在不实际拆包的情况下获得 Perl 中打包项目的数量?