【发布时间】:2012-03-31 16:36:10
【问题描述】:
更新:Salva 正确地指出我对“Q”包模板的介绍是错误的。是 ">" 修饰符不会回到 5.8。
Perl 5.10 引入了 pack() 修饰符 ">",对于我使用“Q”的用例,它在 big endian 中打包了一个无符号四边形(64 位)值。
现在,我正在寻找一个有效的等价物
pack("Q>2", @ints)
其中@ints 包含两个64 位无符号整数。 “Q>2”表示“以大端字节顺序打包两个无符号四边形”。显然,我想要这个,因为我(至少暂时)绑定到 5.10 之前的 Perl。
Update2:实际上,经过进一步思考,应该像以下这样简单:
pack("N4", $ints[0] >> 32, $ints[0], $ints[1] >> 32, $ints[1])
似乎可以在我的 64 位 x86-64 Linux 上运行。为什么这可能与pack("Q>2", @ints) 不完全相同?任何特定于平台的问题?
反之亦然(即相当于 unpack("Q>2", @ints))?
【问题讨论】:
-
scalar reverse pack "Q2", reverse @ints?