我正在尝试解压缩通过 SysV::IPC 从 C 程序传递到 Perl 脚本的无符号长值。
已知该值是正确的(我做了一个测试,将相同的值发送到两个队列中,一个由 Perl 读取,第二个由 C 应用程序读取),并且所有前面的值都被正确读取(使用q
而不是i!
使用 64位整数)。
还知道 PHP 在 bug 中有类似的东西(搜索“unsigned long on 64 bit machines”)(似乎类似: Pack / unpack a 64-bit int on 64-bit architecture in PHP)
到目前为止测试的参数:
- ..Q(=某个大于预期的值)
- ..L (= 0)
- ..L!(=大值)
- ..l (= 0)
- ..l!(=大值)
- ..lN!( = 0)
- ..N,..N!( = 0)
use bigint; use bignum;
- 没有效果。
细节:
sizeof(unsigned long)
= 8;Data::Dumper->new([$thatstring])->Useqq(1)->Dump();
很多空字节沿着一些有意义的..- 字节序='12345678';
解决方案: -x4Q
填充四个字节。