Бинарные файлы
Материал из S.T.A.L.K.E.R. Inside Wiki
Эта статья является введением в бинарные файлы.
Перед чтением других статей из категории "Форматы файлов", сначала следуют ознакомится с этой.
Структура
В двоичных файлах байты представлены в обратном порядке.
Например, число 0x12345678 в файле будет выглядеть так: 78 56 34 12.
Типы данных
Введём обозначения типов данных.
Эти обозначения будут использоваться в других статьях.
Обозначение | Тип | Диапазон | Размер (в байтах) |
---|---|---|---|
B | Целое число | 0 ... 255 | 1 |
H | Целое число | 0 ... 65535 | 2 |
I | Целое число | 0 ... 4294967295 | 4 |
i | Целое число | -2147483648 ... 2147483647 | 4 |
f | Дробное число | - | 4 |
s | Строка | - | - |
В некоторых файлах значение может храниться не во всём байте, а только в его части (например в 4 битах).
В итоге один байт будет хранить два значения.
В статьях про двоичные файлы размеры будут указываться либо в битах, либо в байтах.
Строки обязательно имеют в конце нулевой байт, который указывает на то, что строка закончилась. Например: "test_string0x0".
В результате длина строки равна количеству символов в ней + 1 (нулевой байт).
Блоки
В X-Ray некоторые бинарные файлы имеют формат RIFF.
Такие файлы имеют блоки (ещё их называют чанками или секциями).
Блок - это двоичные данные с заголовком.
Структура блока
Данные | Тип |
---|---|
Идентификатор | H |
Сжатие | H |
Размер содержимого (в байтах) | I |
Содержимое | Двоичные данные |
По идентификатору можно понять, что хранится в конкретном блоке.
Если сжатие установлено в 0x0000, то блок не сжат, а если установлено в 0x8000 то блок сжат по методу Хафмана.
Для декомпресии сжатых блоков можно использовать программу из xray_re_tools (trunk\garbage\lzhuf\lzhuf.c)
В файлах финальной версии игры большинство блоков не сжаты.
Размер содержимого блока указывает только количество байт данных (не включая байты идентификатора, сжатия и размера).
Двоичные данные блока могут быть представлены вложенными блоками.