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

时间:2013-07-09 19:23:42

标签: php c++ binary

我写了一个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是包含0x0001e240的bin文件。似乎我在$ data中得到一个字符串,其中包含0x00,0x01,0xe2和0x40的ASCII。如何将它们变成数字值?

1 个答案:

答案 0 :(得分:1)

您可以使用unpack

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

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