Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2019, 15:15   #1
dimitriy91
Пользователь
 
Регистрация: 25.10.2010
Сообщений: 42
По умолчанию вопрос по zlib

Доброго времени суток. Есть вопрос по использованию функций zlib.
Декодирую данные с помощью
Код:
inflate(&strm, Z_NO_FLUSH);
, функция обрабатывает весь блок (весь кадр deflate до 7 нулей). Как дальше подсунуть следующую порцию закодированных данных и использовать текущий словарь. Повторный вызов
Код:
inflate()
с новым входным буфером, тупо повторяет предыдущие данные, почему-то, не понимаю как исправить.
dimitriy91 вне форума Ответить с цитированием
Старый 16.02.2019, 15:25   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

У inflate есть параметр, а в нем количество новых данных и указатель на них.
p51x вне форума Ответить с цитированием
Старый 16.02.2019, 15:27   #3
dimitriy91
Пользователь
 
Регистрация: 25.10.2010
Сообщений: 42
По умолчанию

Всё верно. Я же говорю, подсовываю новые данные, проверяю что новые. Но по факту данные (блок дефлайт) просто повторяются, почему не понимаю.
dimitriy91 вне форума Ответить с цитированием
Старый 16.02.2019, 15:35   #4
dimitriy91
Пользователь
 
Регистрация: 25.10.2010
Сообщений: 42
По умолчанию

свойства avail_in структуры z_stream не меняется, после повторного вызова. Видать это происходит из-за того, что во время прошлого вызова обнаруживается хвостовик (7 нулей). Нужно, что то сделать дополнительно.
dimitriy91 вне форума Ответить с цитированием
Старый 16.02.2019, 15:37   #5
dimitriy91
Пользователь
 
Регистрация: 25.10.2010
Сообщений: 42
По умолчанию

После первого вызова inflate() возвращает Z_STREAM_END
dimitriy91 вне форума Ответить с цитированием
Старый 16.02.2019, 15:38   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Вы код показывайте, как подсовываете.
p51x вне форума Ответить с цитированием
Старый 16.02.2019, 15:43   #7
dimitriy91
Пользователь
 
Регистрация: 25.10.2010
Сообщений: 42
По умолчанию

Код:
	for (int i = 0; i < N; ++i) {

		fread(&size, 4, 1, fileIN);
		
		buf = new unsigned char[size];
		
		fread(buf, 1, size, fileIN);

		strm.next_in = buf;
		strm.avail_in = size-1; //последний байт лишний, не относится к пакету deflate
				
		status = inflate(&strm, Z_NO_FLUSH);
		//status = inflateEnd(&strm);
		delete[] buf;
		
		fwrite(buf_out, 1, strm.total_out, fileOUT);
	}
В файле данные лежат по кадрам deflate (header(3 bit) body tail(7 zero)). Сначала читаю размер кадра, потом читаю кадр и так далее.
dimitriy91 вне форума Ответить с цитированием
Старый 16.02.2019, 15:49   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А в avail_out места хватает?
p51x вне форума Ответить с цитированием
Старый 16.02.2019, 15:50   #9
dimitriy91
Пользователь
 
Регистрация: 25.10.2010
Сообщений: 42
По умолчанию

Я там выделил 32КБ
dimitriy91 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
zlib KOLANICH Общие вопросы C/C++ 3 10.12.2011 14:41
zLib FanRa3 Работа с сетью в Delphi 4 28.03.2011 16:40
Нестандартный вопрос про zlib Greek9000 Общие вопросы Delphi 2 15.01.2010 05:55
Zlib.dll RoadTrain Общие вопросы Delphi 3 08.05.2007 13:41
ZLib Simply-Art Обсуждение статей 3 03.03.2007 08:24