2013-07-09 100 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位。我認爲這是有效的!非常感謝! –