Witam.
Z góry przepraszam jeżeli wybrałem niewłaściwy dział, bądź nadałem tematowi nazwę nie oddającą w pełni jego charakteru.
Zagadnienie jest takie: Mam ja sobie plik, który jest jakby zakodowany(?). Pewien człowiek z anglojęzycznego forum, napisał konwerter do tego typu plików (rozszerzenie attr_pc), który przerabia je na format xml (zupełnie zrozumiały, czytelny, pozwalający na ich łatwą edycję), oraz w drugą stronę (z xml znowu na attr_pc).
Zawsze chciałem wiedzieć jak się coś takiego robi. Możecie coś podpowiedzieć? Jak należy pracować nad plikiem, by zrozumieć zasadę jego działania, by umieć wykonać coś takiego? Ewentualnie z jakim materiałem powinienem się zapoznać, by takową wiedzę posiąść?
Nie proszę was o napisanie tego za mnie. Mnie tu nie chodzi o uzyskanie efektu, ale o nauczenie się czegoś. Dlatego też przyjmę wszystko - przykłady, fragmenty kodu, linki - będę wdzięczny za każdy typ materiału dydaktycznego.
Wrzucam tu plik z paczuszką spakowaną rarem. W środku jest 1 mały pliczek (kilka kb) w 2 wersjach (attr_pc oraz skonwertowany wcześniej wspomnianą aplikacją, do xml):
http://www38.zippyshare.com/v/56006482/file.html
PS. Zapytałem tego jegomościa o pomoc, a on udostępnił mi schemat budowy owego pliku (attr_pc):
Header:
data[4] signature (normally 'BAF ')
uint32 always 0x64
data[4] CRC32 of everything but the header
data[5] unknown, always 0x00
uint32 Table section offset
uint32 Table count
uint32 Data section offset
uint32 Data count
uint32 String count
uint32 String offset section offset
uint32 String section offset
String offset section:
uint32[string count] just an array of uints
String section:
char*[string count] c-style strings, 0-terminated
To be read in this fashion:
The string offset section contains offsets which you need to add to the base string section offset to read a string. Strings are referenced by their index within the string offset section.
Data section:
uint32 type
uint32 key index (index into string offset section)
switch(type):
case 0:
bool (32bit!)
case 1:
float
case 2:
int32
case 3:
uint32 (index into string offset section)
case 4:
uint32 (table index)
Table section:
uint32 num childs
uint32 index of the first child (index into the data section)
Przyznam się szczerze że nic mi to nie mówi. Nie mam pojęcia co to wszystko znaczy, co mam z tym zrobić, ani tym bardziej jak miałbym uzyskać coś podobnego samodzielnie.
Jeszcze raz proszę o pomoc (wszelaką).
Pozdrawiam.