Приветствую.
Месяц назад заинтересовался программированием, посоветовали начать с PHP, решил попробовать, скачал с торрентов видео курс от "Специалиста" по ПХП 5.3, с основами разобрался, в общем вроде всё хорошо.
Но повис на вопросе бинарных данных, который там не разбирается особо (кроме бинарных операторов), и интернет не особо помог, нашел только
[1],
[2] и
[3], и вроде бы всё понятно (хотя местами и не очень), но ответа на свой вопрос я не нашел
А вопрос в следующем. Мне интересно как в бинарных форматах хранят данные? Как эти данные читать, как эти данные писать (если допустим свой формат делаешь) на PHP?
Поясню. Например, имеем формат реплеев игры Warcraft 3, по которому есть
неофициальная документация, например в начале написано описание заголовка формата:
1. Как это анализировать? Например offset. Не пойму как его воспринимать. Ну, я так понимаю, адрес/смещение. Ну а что дальше? Что мне с этой информацией делать? Как она мне поможет, предположим, для написания моего парсера этого формата?
По size/type ещё могу предположить, что описывается размер данных, и с ним в принципе всё более менее понятно (хотя не очень понятно, как воспринимать что-нить типа 2 dword или 10 dword или 5 word, если такие вариации вообще возможны).
И, что так же интересно, как составители такого рода документаций по всяким форматам, определяют эти самые offset'ы и size/type'ы? Просто не очень понятно как они это выглядывают, если например открыть в блокноте бинарный файл
2. Как это читать на PHP? fopen, fread я полагаю... но как это потом перевести в читаемый/наглядный вид (т.е. из бинарного в строковой)? hex to str? bin to str? hex to bin to str? bin to hex to dec to str? pack..? unpack..? base_convert? ...? Совсем запутался.
3. Предположим, я хочу сделать свой бинарный формат, в котором хочу что-нибудь хранить в разном (в сжатом, в том числе, имеется в виду) виде.
И предположим имею некие начальные данные:
$str_header = 'My mega format';
$str_ver_major = 1;
$str_ver_minor = 0;
$str_data = gzcompress("Lorem Ipsum");
$str_data2 = 'bla bla';
Вопрос: как это можно всё записать в бинарном виде в файл, и потом соответственно прочитать эти бинарные данные из файла чтобы получить эти исходные данные (в массиве, например)? Пробовал самостоятельно, но запутался во всех этих hex to str/bin to str/dec to bin to hex to str/pack/unpack/base_convert/...
Спасибо что потратили время на прочтение, надеюсь поможете с (базовой, хотя бы) теорией, и с примерами (с 3-м пунктом, по нему быть может пойму как быть с 1-м и 2-м), кому не сложно.