2013-12-19 108 views
0

好吧,所以我有點麻煩(可能是由於我的無知)弄清楚了這一點。PHP二進制操作

$binary = base64_decode("AAAAAgYA3ncsRjy9"); 

所以,我在這裏有12個字節的二進制數據,是嗎?

我需要把它變成:

$binary = array("0"=>"00000000", "1"=>"00000000", "2"=>"00000000", "3"=>"00000010", "4"=>"00000110", "5"=>"00000000", "6"=>"11011110", "7"=>"01110111, "8"=>"00101100", "9"=>"01000110", "10"=>"00111100", "11"=>"10111101"); 

而且,最終,丟棄前6個字節,其餘分成2個字節對​​。

$binary = array("0"=>"1101111001110111", "1"=>"0010110001000110", "2"=>"0011110010111101" 

然後,將這兩個字節的塊轉換爲10位十進制數。

$binary = array("0"=>"56951", "1"=>"11334", "2"=>"15549"); 

我選擇包含實際數據的原因是因爲我想確保使用正確的術語。我一直在嘗試使用pack/unpack,並且根本無法完成這項工作,可能是由於我不瞭解格式參數的不同可用選項。

我確定我的解釋非常混亂,請接受我的道歉。任何幫助將不勝感激。


編輯:

爲後人:

PHP Manual - function.pack

PHP Manual - function.unpack

PHP Manual - function.call-user-func-array

回答

3

這應做到:

$binary = base64_decode("AAAAAgYA3ncsRjy9"); 
$binary = substr($binary, 6); 
var_dump(unpack("n*", $binary)); 

n是無符號短(總是16位,大端字節順序)。使用*這種格式用於整個剩餘的數據。

+0

希望我能給+100這個答案! –

+0

絕對非常簡單。一個問題,如果我可以:如果二進制數據被簡單地視爲一個字符串,因此substr是一個可用的函數爲什麼它打印/回顯出「Þw,F <½」? –

+1

@SamanthaP'base64_decode'返回一個字符串,你看到的'文本'是數據對應的字符。 – Gumbo