Форум TeamX
   Home   Members  
Pages: [1] |   Go Down
 
Author Topic: Нет ли примера кода для unzip контента из dat файла.  (Read 1025 times)
Arnx
Пользователь
Posts: 5


Нет ли примера кода для unzip контента из dat файла.
« on: 21 September 2010, 23:29:08 »

Собственно сам файл разобран, раньше у меня был код на C++, но ввиду потери кучи данных и тому, что моя работа уже давно на C#, возник вопрос нет ли у кого примера кода для разжатия некоторого куска данных byte[size].
Стандартный C# GZipStream это вообще gzip формат, но я питал некоторые надежды, что он может проглотить. если ему дописать то что указывалось в документации, заголовок вида - "1F 8B 08 08 9F E8 B7 36 02 03".
В принципе можно и на сях, и со сторонними библиотеками, аналогию попробую найти.
Wasteland Ghost
Администратор
Posts: 869

Маленькое Злое Привидение


Re: Нет ли примера кода для unzip контента из dat файла.
« Reply #1 on: 21 September 2010, 23:45:07 »

А в исходниках dat2 ничего подходящего нет?
Arnx
Пользователь
Posts: 5


Re: Нет ли примера кода для unzip контента из dat файла.
« Reply #2 on: 22 September 2010, 09:11:24 »

Там то есть, но завязано на сишную библиотеку. Враппер писать и клеить пока не хочется, просто потому что подобными вещами еще не занимался..хотя похоже придется. Логику там я в полном объеме где-то как-то недопонимаю. Повторить отвлеченно на C# не получилось.
P/S Теперь я знаю куда пихать такие темы. Если кому будет интересно, то при наличии результата могу выложить код. Конечно если я его добьюмь.
« Last Edit: 22 September 2010, 09:20:35 by Arnx »
Wasteland Ghost
Администратор
Posts: 869

Маленькое Злое Привидение


Re: Нет ли примера кода для unzip контента из dat файла.
« Reply #3 on: 22 September 2010, 09:31:56 »

Всю "технику" общего характера — сюда. В принципе, ничего страшного, если тема попадёт в близкий по тематике раздел: я помедитирую и при необходимости перенесу. Улыбка Просто, как-бе, gzip к исследованию движка Фола не совсем относится... это скорее из разряда общих вопросов программирования.
Freeman
Пользователь
Posts: 50


Re: Нет ли примера кода для unzip контента из dat файла.
« Reply #4 on: 22 September 2010, 12:38:09 »

Неплохо бы указывать dat файлы из какого Фаллаута интересуют, а то первый и второй это две абсолютно разные вещи. По упоминанию GZip я чую запах второго.

Лично я для второго использовал сишную библиотеку zlib и функцию uncompress. Прикручиванием к C# не занимался, но яндекс намекает, что решение есть.
Arnx
Пользователь
Posts: 5


Re: Нет ли примера кода для unzip контента из dat файла.
« Reply #5 on: 23 September 2010, 12:22:23 »

2Freeman Тогда можно тебя попросить выкусить данные для @"text\english\dialog\ACKLINT.MSG". я их хоть сравнить попробую может я банально промазал с офсетом. - просто сишные проекты код то есть, но как их дебажить непонятно уже, Димкин - на борланд билдере, дат2 ( без соотв. либы, от DAT Explorera не подзходит. Да и я сто лет назад настраивал сишные проекты, все уже подзабыл.
И скажи вот ты взял этот кусок..он 770 байт размером, реальный 1558,Offset    339935087.
Если я действую inflate, то во всех сишных примерах с заголовком, контрольной суммой и адлером-32 не делалось ничего. Может это просто глубоко спрятано? Может там надо срезать первые 2 байта?.. Запутался я с этим.
Freeman
Пользователь
Posts: 50


Re: Нет ли примера кода для unzip контента из dat файла.
« Reply #6 on: 23 September 2010, 17:33:08 »

По хорошему надо было указать локализацию, ибо при переводе msg файлы перепаковываются. Но со второй попытки я угадал, что это 1С.
Размеры и смещение правильные. Если я не напутал с выкусыванием, то вот:
Code:
78DABD544D6FD43010BD23F53F4CC505A410355BA0F4C40F5BF5BF55554115149552218EF5BA76EBC4F124B615ED56BBDA30FED8DD222A8E1C9D193FBF79EF4DA6D5C1C1C9F4647AB604AE847212BE68651C2BC072947708163B2D5B698C6A5879B2F7625A1D54CF5DC8B5C99FB516350A2498B9D4C865C300E7D2ACC073D91366A85027030B5AB965ABA0F5B6F19AB52AE31D06BC739CF5A1D5C9990461C60252F16D2896F06309F2518291D0F5B8901A94ED968E1925E1DAB15ED60B591730868616EF7C8019436BE7AD536E955F7A17C06E86B2CCE7F7E17C49778CBF374453F6C6BB951D818320F2DCAC73E35168BC8501E71E2CC15AC24C6F3428218CDEE6CE0FA1F32B13060BE8B0161E0CDB91CD4DC7A1E9157F1038BC4E7356D1A17DB8108A1E1F7AD6D2CCAC852757E19B04521CEC5AB0804D4227396A2117ABA78DD7DA2F58BD11C6AF4BB864FD623F3D149DBD445227E8980855D1D22B52D607C04769D4C6802ABA5300C9B35377276C14A1844F56ABA04E20F28C8A45A249DC0D9B33FD97205574F90ACDE80CD2A09E1C028777949A31A998FBA281A78944D4FECDDCE1D6918FA929BA7A868E6E6ABCCF5920173476CC350A5462B3C13CCAB3D33C714C0FB40A615607428FF9366D46A30640C7A5435EC2559AE7991412BC206FEE092C70734B3A5A87CA9030F4043CD026E00C6B62B420FB68F1C64C2446E727920B98BF1CA7CDE8A3E62465D32F39235E38935AD9A680B8BDE07A2FB0052BB822E5E9434B2F31109C6D77B2843340A10CCE1B9F768CBC24DD1857C1AA124E93BD332F72BD435299B9558E1ACDF16CDA768327CE9318E45B1B7CDC189A0A55D2599182D671BF8ECA1670F130EB9931CB7A1FBEB32095C1A439FD34246D2EFC92ED76A713AD79767A32D96639C2967001DCE64C4D0EB7BE22DD12F1AFD121ED5C8F9CA5A16FC13674043F849C702A93AAF97A8CE43923BF1E951B5DE224FC10D2234583FC09F5126E049BABC49083E34859B18E8A34A91A8700B9F7E2E567696CA36AE0AC57CC105DFAE991019AD6B36E74997EBCFF298F352DC43F02F91B8D363957
Кроме функции uncompress я не пользовался никакими другими. Мой код по распаковке выглядит так:
Code:
fread(&isCompressed,1,1,f);
fread(&fileRealSize,4,1,f);
fread(&filePackedSize,4,1,f);
fread(&fOffset,4,1,f);

fseek(f,fOffset,SEEK_SET);
if (isCompressed==1)
    {
    packedfile = malloc(filePackedSize);
    fread(packedfile,filePackedSize,1,f);
    uncompress((Bytef*)addr, &fileRealSize, (Bytef*)packedfile, filePackedSize);
    free(packedfile);
    }
else
    {
    fread(addr,fileRealSize,1,f);
    }
Arnx
Пользователь
Posts: 5


Re: Нет ли примера кода для unzip контента из dat файла.
« Reply #7 on: 23 September 2010, 19:10:14 »

Как мало иногда надо для счастья! После безумного рабочего дня с кучей не стыковок решить рабочие не стыковки, а потом суметь и это раскопать. Похоже я не туда смотрел, ждал размер обработанных данных, а не статуса в возвращаемом значении и не обратил внимание, что выходной буфер уже в норме. Еще и сброс в файл остался с первых попыток и пошли нестыковки по переменным.
Но когда я был уверен что данные те, ибо выкусились правильно, что никаких хидеров резать/клеить как в f2re1 не надо (теперь я уверен что эта утилита  не очень то и работает), то заметить пару нестыковок и чуть внимательней посмотреть на буфера оказалось существенно проще.
С помощью ZLib.Net я таки данные распаковал. Freeman огромное спасибо).
Pages: [1] |   Go Up