$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。我究竟做錯了什麼?
$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。我究竟做錯了什麼?
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()
所需的那樣。
無法發送陣列進行打包。 Do it right與splat
操作$bin_data = pack("C*", ...$my_a);
關於splat
...
:http://php.net/manual/en/migration56.new-features.php#migration56.new-features.splat
該死的,我現在搜索這個答案几個小時................. *討厭*自豪地問我想。多謝你們! –