PHP如何将body读入字节数组,而不使用unpack函数?

3
我正在编写一个在apache2中运行的PHP脚本。我从设备获取了一个字节数组,需要将其解析为对象。当我执行 $body = file_get_contents('php://input') 时,得到的是一个字符串。然后我需要执行一个 funky unpack('C*', $body)。现在,我有了一个数组,在开始处多了一个额外的元素,这是从解包过程中得到的。似乎我在试图做一些看起来微不足道的事情。
有没有一种方式可以直接将内容读取为字节数组,并跳过所有的字符串转换垃圾?加油PHP!它只是一个字节数组!
1个回答

1
相信我,无论你信不信,在PHP中没有特定的字节容器。你正在以正确的方式进行操作。我已经在这种语言中开发了几个二进制算法,当你来自其他语言如C++或Delphi时,它确实很难理解。
在PHP中,标准的字节数组容器是字符串。例如:
$myVar = file_get_contents("/folder/myfile.bin");

在这种情况下,myVar作为字符串和字节数组的形式存在。
改变字节表示的唯一方法是执行打包和解包操作。
$myByteArray= unpack("N*",$myvar); 
for($i = 0; $i < strlen($myByteArray); $i++)
{ 
    echo $myByteArray[$i].'<br/>'; 
}

这里有一些很好的解释:

http://docstore.mik.ua/orelly/webprog/pcook/ch01_14.htm

http://www.codediesel.com/php/unpacking-binary-data/

根据我的经验,我想给你一个最后的提示:如果你计划将你的PHP应用程序迁移到许多不同的硬件体系结构上,请注意pack/unpack操作的字节序。


我已经搞定了,感谢你的帮助。我刚刚创建了一个包装器,围绕着upack给了我一个漂亮的零索引数组。我还在数据包的末尾添加了一个非零填充,因为我无法弄清如何使用解包中的“a”选项来忽略尾随的零。 - Dashoveler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接