шифрование — 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. Что я делаю неправильно?

0

Решение

pack() к сожалению, не может принимать ни одного аргумента массива. Вам нужно распаковать массив в дополнительные аргументы.

Вместо этого вы можете использовать следующее:

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

Это в основном объединит аргумент упаковки с вашим массивом данных и функцией call_user_func_array() позвоню pack() со всеми аргументами, извлеченными из данного массива, как одиночные аргументы, как необходимо.

Или же используйте оператор splat, если вы используете PHP 5.6+

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

Из руководства: Массивы и объекты Traversable могут быть распакованы в списки аргументов при вызове функций с помощью оператора …. Это также известно как оператор splat в других языках, включая Ruby.

Таким образом, массив распаковывается в отдельные аргументы, так же, как это нужно pack(),

3

Другие решения

Вы не можете отправить массив для упаковки. Сделай это правильно с splat оператор $bin_data = pack("C*", ...$my_a);

Около splat ...: http://php.net/manual/en/migration56.new-features.php#migration56.new-features.splat

2

По вопросам рекламы [email protected]