在 php 4.4.4 中具有:
$hbc=pack("LL",82603088,82602992);
list($v1,$v2)=unpack("L2",$hbc);
echo("v1=".$v1." v2=".$v2);
结果是:
v1= v2=82603088
我已经花了几个小时来解决这个问题......谢谢
错误不在打包或解包中,而是在list()
.
开启通知!你的代码会这样抱怨:
Notice: Undefined offset: 0 in ...
这应该让你想知道。如果您转储 unpack 返回的数组,则正确:
array(2) {
[1] =>
int(82603088)
[2] =>
int(82602992)
}
然后在 docs 页面上有一个小小的注释list()
:
list() 仅适用于数字数组,并假定数字索引从 0 开始。
您的数组不是从索引 0 开始的,并且通知喜欢告诉您这一点。
快速修复是:
list(,$v1,$v2)=unpack("L2",$hbc); // add a comma to skip index 0
更好的方法可能是用于unpack
创建命名数组索引:
$unpacked = unpack("L2v/",$hbc);
结果:
array(2) {
'v1' =>
int(82603088)
'v2' =>
int(82602992)
}