如何在php中处理二进制数据(而不是二进制字符串)

How to deal with binary data in php (not binary string)?

本文关键字:二进制 字符串 数据 php 处理      更新时间:2023-10-16

我编写了一个C++程序,将POST数据发送到php。我的数据是二进制的123456,即0x0001e240。

我的php文件读起来像

$f=fopen("php://input", "r");
if (!$f) die ("cannot open");
$data = fread($f, 4);
echo $data;

在我的接收程序(C++)中,我可以看到返回的数据正是0x0001e240,所以我相信php确实接受了纯二进制的东西,并保存到$data中。

但是,我想在php中获得123456。我尝试过bindec、hexdec等函数,但都不起作用。如何从$data中获取数字。

另外,我需要关心php中的endians吗?我现在使用windows环境在本地工作,但我最终会把我的代码放到云端。

编辑

$f=fopen("test.bin", "rb");
if (!$f) die ("cannot open");
$data = fread($f, 4);
echo $data;

其中test.bin是一个bin文件,包含0x0001e240。我似乎在$data中得到了一个字符串,它与0x00、0x01、0xe2和0x40的ASCII合成。如何将它们转换为数值?

您可以使用unpack:

$num = unpack('n', $data);

使用大写字母表示无符号整数,使用v(或V)表示小端序。是的,你必须担心endianness。只要找出它是什么并坚持下去。