1

在 php 4.4.4 中具有:

$hbc=pack("LL",82603088,82602992);
list($v1,$v2)=unpack("L2",$hbc);
echo("v1=".$v1." v2=".$v2);

结果是:

v1= v2=82603088

我已经花了几个小时来解决这个问题......谢谢

4

2 回答 2

1

错误不在打包或解包中,而是在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)
}
于 2013-07-28T13:04:13.137 回答
0

来自 php.net 的评论

$int_list = array_merge(unpack("s*", $some_binary_data));

这将基本上从 0 开始重置您的索引键。

于 2014-04-01T16:56:11.343 回答