2013-07-09 103 views
1

我写了一个C++程序,将POST数据发送到php。我的数据是二进制的123456,即0x0001e240。如何处理php中的二进制数据(不是二进制字符串)?

我的PHP文件读起来就像

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

在(在C++中)我的接收程序,我可以看到回送的数据是完全0x0001e240,所以我相信PHP确实接受纯二进制的事情,并保存到$数据。

但是,我想在php中获得123456。我尝试了像bindec,hexdec等功能,但没有一个可行。我如何从$数据中获取数字。

另外,我需要关心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合成。我怎样才能使他们成为一个数字值?

回答

1

您可以使用unpack

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

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

+0

感谢您的回复。但是我收到了一条通知:“注意:数组到字符串的转换”,我没有得到我想要的数字。 –

+0

哎呀,我知道我错了什么。我应该使用N为32位。我认为这是有效的!非常感谢! –