PHP 在不使用解包的情况下将主体读入字节数组

标签 php arrays bytearray

<分区>

我正在编写一个在 apache2 中运行的 PHP 脚本。我从需要解析为对象的设备获取字节数组。当我执行 $body = file_get_contents('php://input') 时,我得到一个字符串。然后我需要做一个时髦的 unpack('C*', $body)。现在我有一个数组,在开头有一个额外的元素,来自解包过程。看来我太努力了,做一些看似微不足道的事情。

有没有办法将正文作为字节数组读取,并跳过所有字符串转换垃圾?来吧PHP!它只是一个字节数组!

最佳答案

相信我,信不信由你,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 应用程序迁移到许多不同的硬件架构,请注意打包/解包操作的字节顺序。

关于PHP 在不使用解包的情况下将主体读入字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28600374/

相关文章:

php - 哪个是 Windows 上最好的 PHP 编辑器?

c - 求char**形式的字符串数组的长度?

c - C 中以 NULL 结尾的结构类型数组

java - Hibernate 搜索在索引中存储 byte[]

C#:将字节数组转换为 float

php - 第 2 行的 fatal error : Call to undefined function mysql_connect() in C:\Apache\htdocs\test. php

javascript - 如何在提交表单时使用 wp_enqueue_script() 添加本地脚本?

php - 在 php 中实例化对象时为 parent::__constructor() 函数传递参数

java - 获取 JSON 数组中的特定值 (Java)

c# - 如何在 C# 中从 IntPtr 获取 byte[]