2016-08-31 45 views
0

我:PHP ByteArray的二進制數據

$my_a = array(100, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); 

這是一個字節組,我想轉換成二進制數據加密使用。我要做的就是:

$bin_data   = pack("C*", $my_a); 

爲了驗證這是否正確我通過扭轉它:

unpack("C*", $bin_data); 

問題是,我從來沒有找回BYTE_ARRAY。我究竟做錯了什麼?

回答

3

pack()不能採取單一陣列中的說法,很遺憾。您需要將數組解包到其他參數中。

,您可以改用以下內容:

$packed = call_user_func_array("pack", array_merge(array("C*"), $my_a)); 

這將基本上合併包裝參數與您的數據陣列和功能call_user_func_array()將調用pack()與給定數組中提取的所有參數,如單個參數,像需要。

或可替換地,如果你使用PHP 5.6+

$packed = pack('C*', ...$my_a); 

從說明書使用圖示操作:數組和對象Traversable的調用可以通過使用...操作功能時,可以解壓到參數列表。這也被稱爲其他語言中的splat操作符,包括Ruby。

因此,數組被解壓縮爲單個參數,就像pack()所需的那樣。

+0

該死的,我現在搜索這個答案几個小時................. *討厭*自豪地問我想。多謝你們! –