INI
💢 Обзор
Файлы INI для фрилансеров бывают двух типов: текстовые и двоичные (BINI).
При чтении INI, текстового или двоичного, следует учитывать несколько ключевых аспектов:
- Разделы и свойства в них рассматриваются как последовательность инструкций, а не как сериализованные списки свойств.
- Свойства могут иметь одинаковые имена в одном разделе, а несколько разделов могут иметь одинаковые имена.
- Сохранение порядка разделов и свойств имеет важное значение.
- Свойство раздела может иметь до 256 значений, разделенных запятой в текстовом формате и явно подсчитанных в двоичном формате.
- Отдельные значения являются примитивными типами: булевы, целые, вещественные и строковые.
- Свойства в текстовом формате в разделе без каких-либо значений рассматриваются как булевы со значением true.
- При работе со значениями из текстового формата необходимо соблюдать осторожность — при запросе преобразуйте их в нужный тип.
Свойство с именем «comment» можно использовать для комментариев, поскольку BINI не содержит обычных комментариев INI.
⚡ Двоичный INI (BINI)
Порядок байтов Little-endian.
💨 Заголовок
| Имя | Тип | Описание |
|---|---|---|
| singnature | uint32 | Должно быть 0x494E4942 («BINI»). |
| version | uint32 | Версия формата (0x1). |
| namesOffset | uint32 | Смещение до блока словаря. |
| sections | varying | |
| names | varying |
- Словарь представляет собой соединенную коллекцию строк ASCIIz (строки ASCII, завершающиеся символом NUL).
- Лучше всего сохранять имена разделов и свойств перед значениями строк в словаре.
- После заголовка читайте разделы до namesOffset.
⚡ Раздел
| Имя | Тип | Описание |
|---|---|---|
| nameOffset | uint16 | Смещение имени раздела в словаре. |
| propertyCount | uint16 | Количество объектов недвижимости указано ниже. |
| properties | varying |
🔥 Недвижимость
| Имя | Тип | Описание |
|---|---|---|
| nameOffset | uint16 | Смещение имени свойства в словаре. |
| valueCount | uint8 | Количество значений свойства. |
| values | varying |
💥 Value
| Имя | Тип | Описание |
|---|---|---|
| type | uint8 | Тип свойства. |
| value | byte[4] | Значение свойства. |
- Двоичный формат ограничивает количество значений для каждого свойства 256, поэтому лучше не превышать это количество в текстовом формате.
- Интерпретируйте значение четырех байтов на основе предшествующего типа:
| Тип | Значение | Описание |
|---|---|---|
| Boolean | 0x0 | Наиболее значимый бит в значении является булевым. |
| Integer | 0x1 | Значение представляет собой 32-разрядное целое число со знаком. |
| Float | 0x2 | Значение представляет собой 32-разрядное число с плавающей запятой. |
| String | 0x3 | Значение представляет собой 32-разрядное целое число без знака, которое является смещением до строки в блоке словаря. |
