1

我编写了一个将 POST 数据发送到 php 的 C++ 程序。我的数据是二进制的 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中的字节序吗?我现在在本地使用 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 组合而成。我怎样才能把它们变成一个数值?

4

1 回答 1

1

您可以使用unpack

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

对无符号整数使用大写字母,对 little-endian 使用v(或V)。是的,您必须担心字节顺序。只要找出它是什么并坚持下去。

于 2013-07-09T19:26:21.400 回答