Я пишу скрипт PHP для запуска в apache2. Я получаю байтовый массив с устройства, которое мне нужно проанализировать в объекте. Когда я делаю $ body = file_get_contents (‘php: // input’), я получаю строку. Затем мне нужно сделать распаковку в стиле фанк (‘C *’, $ body). Теперь у меня есть массив, который имеет дополнительный элемент в начале, из процесса распаковки. Кажется, я слишком стараюсь сделать что-то тривиальное.
Есть ли способ просто прочитать тело как байтовый массив и пропустить весь мусор преобразования строк? Давай на PHP! Это просто массив байтов!
Поверьте мне, верьте или нет, в PHP нет конкретных байтовых контейнеров. Вы делаете это правильно. Я разработал несколько бинарных алгоритмов на этом языке, это действительно трудно понять, когда вы пришли из других языков, таких как C ++ или Delphi.
В PHP стандартным контейнером байтового массива является строка. Например:
$myVar = file_get_contents("/folder/myfile.bin");
В этом случае myVar действует как строка, а также как массив байтов.
Единственный способ изменить представление байтов — выполнить операции упаковки и распаковки.
$myByteArray= unpack("N*",$myvar);
for($i = 0; $i < strlen($myByteArray); $i++)
{
echo $myByteArray[$i].'<br/>';
}
Здесь у вас есть несколько хороших объяснений:
http://docstore.mik.ua/orelly/webprog/pcook/ch01_14.htm
http://www.codediesel.com/php/unpacking-binary-data/
И позвольте мне дать вам последний совет, основанный на моем опыте: если вы планируете переносить ваше PHP-приложение на множество различных аппаратных архитектур, позаботьтесь о сохранности при операциях pack / unpack.
Других решений пока нет …