php()和unpack()之间的PHP区别

时间:2013-07-28 10:19:34

标签: php pack unpack

在php 4.4.4中:

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

结果是:

  

v1 = v2 = 82603088

我已经有几个小时的时间把头包裹起来...... 感谢

2 个答案:

答案 0 :(得分:1)

错误不在于打包或解包,而是在list()

开启通知!你的代码会这样抱怨:

Notice: Undefined offset: 0 in ...

那会让你好奇。如果转储由unpack返回的数组,则它是正确的:

array(2) {
  [1] =>
  int(82603088)
  [2] =>
  int(82602992)
}

然后在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)
}

答案 1 :(得分:0)

来自php.net comments

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

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