Я хочу написать анализатор для структур NBT (именованные двоичные теги). Формат представлен так:
TAG_Compound("hello world"): 1 entries
{
TAG_String("name"): Bananrama
}
И в памяти (или в файле, в котором он хранится) в шестнадцатеричном виде:
0000000: 0a 00 0b 68 65 6c 6c 6f 20 77 6f 72 6c 64 08 00 ...hello world..
0000010: 04 6e 61 6d 65 00 09 42 61 6e 61 6e 72 61 6d 61 .name..Bananrama
0000020: 00 .
0x0a
= TAG_Compound
0x00 0x0b
= имя длиной 11 символов
- "Привет, мир"
0x08
= TAG_String
0x00 0x04
= длина имени 4 символа
- "имя"
0x00 0x09
= полезная нагрузка составляет 9 символов
- "Bananarama"
0x00
= TAG_End
С усложнением TAG_Compound
, например древовидной структурой, все становится сложнее.
Теперь мой вопрос не совсем о разборе формата, это действительно просто. Я бы предпочел узнать, как эффективно и, что более важно, удобно хранить его для дальнейшего использования.
Я знаю, что не могу достичь такой степени легкости, как
tags["hello world"]["name"] = "Bananrama"
Но каков наилучший способ сохранить его, оставляя его простым в использовании? Я подумал о структуре nbt_compound
(потому что каждое дерево NBT имеет по крайней мере одно корневое соединение), чтобы оно сохраняло количество дочерних элементов и содержало массив структур nbt_value
, которые будут хранить тип и содержимое этого значения. Это хорошая идея?
Редактировать: полную спецификацию можно увидеть здесь