Бинарные файлы — S.T.A.L.K.E.R. Inside Wiki

Бинарные файлы

Материал из S.T.A.L.K.E.R. Inside Wiki

Версия от 07:40, 20 декабря 2016; Pavel (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Эта статья является введением в бинарные файлы.

Перед чтением других статей из категории "Форматы файлов", сначала следуют ознакомится с этой.

Структура

В двоичных файлах байты представлены в обратном порядке.

Например, число 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)

В файлах финальной версии игры большинство блоков не сжаты.

Размер содержимого блока указывает только количество байт данных (не включая байты идентификатора, сжатия и размера).

Двоичные данные блока могут быть представлены вложенными блоками.


Участник: Pavel

Другие места
LANGUAGE