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-разрядное целое число без знака, которое является смещением до строки в блоке словаря. |