Разбор двоичного файла в PHP
Используя любой низкоуровневый язык для хранения заданного значения, двоичный код должен использоваться, как только вы загрузите его в текстовом редакторе, чтобы записать или прочитать его.
Двоичный файл не может быть прочитан как он есть в необработанном двоичном формате на таких языках, как Pascal. Следовательно, веб-мастера используют PHP для чтения и записи файлов в виде текста. Для получения ваших значений должна использоваться определенная функция.
PHP использует уникальную функцию unpack (). После объявления первого аргумента типа данных вам необходимо восстановить и создать второй аргумент в виде строки, из которой вы хотите извлечь данные. Восстанавливаемые данные должны быть в символических аргументах.
При использовании языков низкого уровня, таких как C или Pascal, это обычная процедура для хранения данных в двоичном файле (запись, которая не может быть переведена в текст).
Используя язык C, если вы хотите сохранить значение 500 в файле, код будет следующим:
#include int main () {int val = 500; FILE * fp = fopen ("file", "wb"); fwrite (& val, sizeof (int), 1, fp); // сохранить val в "file" fclose (fp); вернуть 0; }
Когда вы открываете этот конкретный файл в текстовом редакторе, вы можете обнаружить, что он не читается, потому что ваше значение сохраняется не в виде текста, а в виде двоичного файла.
Но если вы используете PHP, часто необходимо извлекать значения, хранящиеся в двоичном виде время от времени. Тем не менее, PHP читает и пишет в файлы в виде текста. Для получения ваших значений должна использоваться определенная функция.
Решение:
Функция unpack () может быть использована для решения такого рода проблем. Сначала необходимо указать тип данных, которые вы хотите восстановить, а затем строку, из которой вы хотите получить данные.
Тип данных, подлежащих восстановлению, должен быть детализирован с использованием соответствующего символа. Например, чтобы получить целое число со знаком, используйте символ i .
Так что, если мы используем файл, который мы сохранили в примере выше, вот код для получения нашего значения:
- Важные заметки:
- Размер данных может меняться в зависимости от архитектуры процессора (Sparc, ARM, PowerPC).
- Программа, написанная на C, использует целые числа разных размеров от 32 до 64 бит.
- Расположение данных может не совпадать. Некоторые машины хранят данные в Big Endian, другие в Little Endian.
- Размер данных может варьироваться в зависимости от компилятора
- Функция unpack возвращает массив немного более сложный, чем тот, который приведен здесь в качестве примера. В нашем случае с одним запрошенным значением наше значение находится в смещении 1 массива.
- Типы данных для 32-битного ПК
- Вот таблица, показывающая данные, записанные программой на C, скомпилированные для 32-битного ПК:
- символ : с
- символ без знака : C
- коротко : s
- без знака короткий : S
- int : I
- без знака int : L
- float : f
- двойной : d