Создать бинарный файл с заданной структурой - PullRequest
1 голос
/ 31 августа 2010

У меня есть устройство, использующее конфигурацию в двоичном формате, и мне нужно генерировать эти файлы на лету.

Файловая структура должна состоять из нескольких параметров конфигурации (по одному на параметр), каждая из которых имеет вид:

  • Тип
  • Длина
  • Value

где:

  • Тип: однооктетный идентификатор, который определяет параметр
  • Длина: это один октет, содержащий длину поля значения в октетах (не включая поля типа и длины)
  • Значение: от одного до 254 октетов, содержащих конкретное значение для параметра

У меня есть соответствующая таблица

 Type_code[int] => { Type_length[int] => Value[int/string/hex/etc.] }

Как проанализировать эту таблицу в этом двоичном формате? И, во-вторых, как проанализировать этот двоичный файл, чтобы вернуть обратно формат массива php?

1 Ответ

2 голосов
/ 31 августа 2010

Есть функции pack / unpack , которые могут преобразовывать различные двоичные / шестнадцатеричные / восьмеричные / строковые форматы.Прочитайте кусок файла, распакуйте необходимые биты с помощью unpack и поработайте оттуда.

$fh = fopen('data.txt', 'rb'); // b for binary-safe

// read 2 bytes, extract code/length, then read $length more bytes to get $value
while(($data = fread($fh, 2)) !== EOF)) { 
    list($code, $length) = unpack('CC', $data);
    $data = fread($fh, $length);

    // do stuff
}
fclose($fh);
...