[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: unpack переменной со сложной структурой
mephy
Здравствуйте!

Есть поток байтов довольно сложной формы.
Блок состоит из 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 написал(а):
про строки - символов переноса там нет smile.gif

в идеале чтобы можно было как по pointer'у побайтово считывать данные,
сразу узнать число символов в строке и вытащить одним unpack'ом.


Спустя 12 минут, 50 секунд (25.10.2011 - 15:17) mephy написал(а):
Решил делать через substr.

Сначала вырезать первые 2 байта, unpack их
Потом на основе полученного числа узнавать начало новой строки (2+size_of_block*num), вырезать еще 2 байта и т.п.

надеюсь будет достаточно быстро)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.