Есть поток байтов довольно сложной формы.
Блок состоит из n строк (число их известно).
Структура строки:
unsigned short Number + {unsigned long Data, unsigned char Status} m раз,
где m - значение unsigned int Number. Потом идет другая строка.
Надо считать весь блок в массив.
Пока вижу это так:
//получаю число элементов в первой строке, допустим 3.
$num1=unpack("S", $data)
//Смотрю всю строку, т.к. теперь знаю ее длину могу глянуть длину второй строки
$data1=unpack("Snum/Ldata1/CStatus1/Ldata2/CStatus2/Ldata2/CStatus2/Snum2", $data);
//и т.д.
Строк в $data много (около 200 обычно), и это столько итераций делать не хочется.
Есть ли возможность делать unpack побайтово?
Substr'ом резать исходную переменную $data?
Спасибо.
Спустя 9 минут, 41 секунда (25.10.2011 - 15:04) mephy написал(а):
про строки - символов переноса там нет 
в идеале чтобы можно было как по pointer'у побайтово считывать данные,
сразу узнать число символов в строке и вытащить одним unpack'ом.

в идеале чтобы можно было как по pointer'у побайтово считывать данные,
сразу узнать число символов в строке и вытащить одним unpack'ом.
Спустя 12 минут, 50 секунд (25.10.2011 - 15:17) mephy написал(а):
Решил делать через substr.
Сначала вырезать первые 2 байта, unpack их
Потом на основе полученного числа узнавать начало новой строки (2+size_of_block*num), вырезать еще 2 байта и т.п.
надеюсь будет достаточно быстро)
Сначала вырезать первые 2 байта, unpack их
Потом на основе полученного числа узнавать начало новой строки (2+size_of_block*num), вырезать еще 2 байта и т.п.
надеюсь будет достаточно быстро)