【问题标题】:How to deal with binary data in php (not binary string)?如何处理php中的二进制数据(不是二进制字符串)?
【发布时间】:2013-07-07 13:08:01
【问题描述】:

我编写了一个将 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 组合而成。我怎样才能把它们变成一个数值?

【问题讨论】:

    标签: php c++ binary


    【解决方案1】:

    你可以使用unpack:

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

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

    【讨论】:

    • 感谢您的回复。但是我收到一条通知,上面写着“注意:数组到字符串的转换”,我没有得到我想要的数字。
    • 哎呀我知道我错了。我应该将 N 用于 32 位。我认为这行得通!非常感谢!
    猜你喜欢
    • 2011-08-22
    • 2018-03-20
    • 2015-08-16
    • 2017-11-19
    • 1970-01-01
    • 2012-08-27
    • 2016-01-15
    • 1970-01-01
    相关资源
    最近更新 更多