Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915

Zlib заголовок без размера данных до сжатия

14.12.2022, 16:31. Показов 1802. Ответов 40
Метки нет (Все метки)

Здравствуйте,

Вопрос из разряда "почему же так не сделали":

В описании функции uncompress сказано, что:

destLen is the total size of the destination buffer, which must be large enough to hold the entire uncompressed data. (The size of the uncompressed data must have been saved previously by the compressor and transmitted to the decompressor by some mechanism outside the scope of this compression library.)
destLen — это общий размер целевого буфера, который должен быть достаточно большим, чтобы вместить все несжатые данные. (Размер несжатых данных должен быть сохранен ранее компрессором и переданным в декомпрессор некоторыми механизм, выходящий за рамки этой библиотеки сжатия.)
То есть Zlib получается ничего не знает о размере сжатых данных, которые были до сжатия.

Нежели дополнительные 8 байт в заголовке, в который можно было бы поместить этот размер - настолько сделал бы процесс сжатия-расжатия - не эффективным, что его не захотели использовать ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.12.2022, 16:31
Ответы с готовыми решениями:

zlib метод\уровень сжатия
Как менять метод и уровень сжатия при этом применяя api?

Заголовок Zlib (adler32) 1.1.3 - Кратность 31
Привет, столкнутлся с простой, но в тоже время непонятной задаче связанной с zlib и без помощи не могу разобраться. В первую очередь...

Не могу составить заголовок http для zlib
Пишу, что-то вроде http-сервера. Хочу чтобы он слал упакованные тела. В QByteArray result есть некий текст, упакованный qCompress ...

40
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
14.12.2022, 18:07  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
посылка несжатых данных

код от квартиры, где деньги лежат

незачем, никто ничего не заменяет, число дописывается к началу данных

А дописывать
чтобы знать, сколько будет распаковано и выделить буфер под распаковку.
Как вы можете дописать 9-ый байт к 8-байтовому коду от квартиры, где деньги лежат ?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,538
Записей в блоге: 1
14.12.2022, 18:11
C
1
bytes[-1]=count;
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
14.12.2022, 18:15  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
C
1
bytes[-1]=count;
Такие высокие материи не понимаю.
Но, даже, если вам, как то удалось добавить 9-ый байт в 8-ми байтовый массив Несжатых данных.

Дальше что ? Дальше Вы эти 9 байт сжимаете ? Правильно ?

Сжали до трех байт предположим. Откуда из этих трех байт Вы извлечёте информацию о первоначальном размере массива ?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,538
Записей в блоге: 1
14.12.2022, 18:22
Цитата Сообщение от Optimus11 Посмотреть сообщение
Такие высокие материи не понимаю.
ну я мог бы разжевать как это делается: в структуре данных изначально задаётся поле с байтом размера
или в буфер данных изначально пишут данные не с нулевого, а с первого байта
или копируют данные в промежуточный буфер, начиная с первого индекса, а в нулевой пишут размер
или...
но обсуждение тогда уйдёт от темы.
Цитата Сообщение от Optimus11 Посмотреть сообщение
Сжали до трех байт предположим. Откуда из этих трех байт Вы извлечёте информацию о первоначальном размере массива ?
я же написал, вызовом функции

C
1
2
Bytef dest; uLongf destLen=1
uncompress(&dest, &destLen, source, 3);
передаём всю шифрограмму source и весь её размер (3)
но размер destLen указываем 1 байт и на выходе получаем 1 байт
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
14.12.2022, 18:27  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
ну я мог бы разжевать как это делается:
или копируют данные в промежуточный буфер, начиная с первого индекса, а в нулевой пишут размер
Зачем разжевывать, я об этом в самом начале еще написал. Но вы не поняли просто видимо.



Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
я же написал, вызовом функции

C
1
2
Bytef dest; uLongf destLen=1
uncompress(&dest, &destLen, source, 3);
передаём всю шифрограмму source и весь её размер (3)
но размер destLen указываем 1 байт и на выходе получаем 1 байт
На каком основании вы укажите destLen=1 ?

C++
1
destLen — это общий размер целевого буфера, который должен быть достаточно большим, чтобы вместить все несжатые данные.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,538
Записей в блоге: 1
14.12.2022, 18:33
Optimus11, на основании того, что я хочу распаковать только 1 байт
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
14.12.2022, 18:34  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Optimus11, на основании того, что я хочу распаковать только 1 байт
Так, и что это даст ? Ну предположим Zlib распакует 1 байт, дальше что ? Что вы с этим распакованным байтом делать будете?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,538
Записей в блоге: 1
14.12.2022, 18:36
Цитата Сообщение от Optimus11 Посмотреть сообщение
Что вы с этим распакованным байтом делать будете?
передам в malloc и буду уверен, что у меня есть достаточного размера буфер, куда мне посылку распаковывать
это искомый размер несжатых данных
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
14.12.2022, 18:39  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
передам в malloc и буду уверен, что у меня есть достаточного размера буфер, куда мне посылку распаковывать
это искомый размер несжатых данных
Распаковка Zlib гарантирует, что 1 байт Сжатых данных строго соответствует последовательности начинаю с первого байта Несжатых данных ?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,538
Записей в блоге: 1
14.12.2022, 18:42
так, вот сейчас не надо путаться. сжатых данных у меня ни в одной строке кода отнюдь не 1 байт, я везде передаю в uncompress полную посылку
1 байт это несжатый результат
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
14.12.2022, 18:48  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
так, вот сейчас не надо путаться. сжатых данных у меня ни в одной строке кода отнюдь не 1 байт, я везде передаю в uncompress полную посылку
1 байт это несжатый результат
Мне кажется Вы или сами запутались или меня несознательно путаете.

Что это значит то ?? Я вижу слова, отдельные Ваши слова понимаю, но что Вы хотите донести вообще не понятно.

Вы в предыдущем сообщении передали указатель на строку в размер 1 байт и указали 1 байт в качестве размера распокованной строки. Я задал конкретный вопрос. Что в нем сложно ?

Или тогда пишите нормально, что Вы хотите сказать, а то сначала пишите абстракции про 1 байт, а когда я задаю вопрос про эти 1 байт, то у Вас уже "отнюдь не 1 байт".
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,538
Записей в блоге: 1
14.12.2022, 18:57
Цитата Сообщение от Optimus11 Посмотреть сообщение
Я задал конкретный вопрос. Что в нем сложно ?
так если я написал одно, а вы спрашиваете другое, исходя из неверных предположений, то и ответить на вопрос невозможно!
Это как отвечать на "когда вы перестали пить коньяк по утрам?"
Я вижу, что вы не понимаете, как вообще можно распаковывать посылку zlib из 1 байта. Но я нигде не беру посылку zlib из 1 байта. Вообще нигде!

Давай ещё раз
Цитата Сообщение от Optimus11 Посмотреть сообщение
Распаковка Zlib гарантирует, что 1 байт Сжатых данных строго соответствует последовательности начинаю с первого байта Несжатых данных ?
я говорю "Распакуй первый байт из этой посылки в 100 байт"
получаю "окей, первый байт - число 200"
Я не говорю "Распакуй первый байт из этой посылки в 1 байт"
Я не говорю "Возьми первый байт из этой посылки в 100 байт"
Я не говорю "Возьми последний байт из этой посылки в 100 байт"
Я не интересуюсь, из какого места посылки и по какому алгоритму получен этот 1 байт
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
14.12.2022, 19:17  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Давай ещё раз

я говорю "Распакуй первый байт из этой посылки в 100 байт"
получаю "окей, первый байт - число 200"
Я не говорю "Распакуй первый байт из этой посылки в 1 байт"
Я не говорю "Возьми первый байт из этой посылки в 100 байт"
Я не говорю "Возьми последний байт из этой посылки в 100 байт"
Я не интересуюсь, из какого места посылки и по какому алгоритму получен этот 1 байт
Ну вот опять ниче не понятно.

Что за посылка ? Дяде Федору ?
Давайте условимся в терминах: пусть будут только буфер Несжатых данных и буфер Сжатых данных ?

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
я говорю "Распакуй первый байт из этой посылки в 100 байт"
Пусть не будет ни каких посылок, пусть будет Изначальная строка/буфер Несжатых данных.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,538
Записей в блоге: 1
14.12.2022, 19:20
Цитата Сообщение от Optimus11 Посмотреть сообщение
Ну вот опять ниче не понятно.
Что за посылка ? Дяде Федору ?
Давайте условимся в терминах: пусть будут только буфер Несжатых данных и буфер Сжатых данных ?
распакуй буфер сжатых данных длинной 100 байт в буфер несжатых данных длиной 1 байт.

Цитата Сообщение от Optimus11 Посмотреть сообщение
Ну вот опять ниче не понятно.
Что за посылка ? Дяде Федору ?
нет, я же говорю, это код от квартиры, гд деньги лежат. Вы уже меня об этом спрашивали. Почему вам так принципиально важно, что у меня за посылка?
и почему вы не понимаете, что посылка и буфер сжатых данных это одно и то же?
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
14.12.2022, 19:23  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
распакуй буфер сжатых данных длинной 100 байт в буфер несжатых данных длиной 1 байт.



нет, я же говорю, это код от квартиры, где деньги лежат. Вы уже меня об этом спрашивали. Почему вам так принципиально важно, что у меня за посылка?
и почему вы не понимаете, что посылка и буфер сжатых данных это одно и то же?
Мне принципиально, потому что Вы пишите одно, когда задаю вопрос по этому "одному" - Вы пишите "отнюдь".
Код от квартиры где деньги лежат - у вас лежал в 8ми байтах, но теперь это посылка в 100 байт.

Не люблю такие изменения.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,538
Записей в блоге: 1
14.12.2022, 19:30
Цитата Сообщение от Optimus11 Посмотреть сообщение
Код от квартиры где деньги лежат - у вас лежал в 8ми байтах, но теперь это посылка в 100 байт.
не вижу причин не понимать мои примеры.
Я увеличил в примере размер буфера потому что вы раз за разом не понимаете, что в нём лежат сжатые данные и что это все сжатые данные целиком, не первый байт, не последний.
Я подумал, что если я для примера напишу размер буфера больше, вы наконец перестанете думать, что речь о каком-то другом буфере, об одном байте сжатых данных, о последовательности какой-то, начиная с этого байта. Потому что включится аналогия "ну раз 100 байт данных, вряд ли в них зашифрован лишь один байт оригинала"
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
14.12.2022, 19:43  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
не вижу причин не понимать мои примеры.
Я увеличил в примере размер буфера потому что вы раз за разом не понимаете, что в нём лежат сжатые данные и что это все сжатые данные целиком, не первый байт, не последний.
Я подумал, что если я для примера напишу размер буфера больше, вы наконец перестанете думать, что речь о каком-то другом буфере, об одном байте сжатых данных, о последовательности какой-то, начиная с этого байта. Потому что включится аналогия "ну раз 100 байт данных, вряд ли в них зашифрован лишь один байт оригинала"
Ну так я и спрашиваю, гарантируется ли, что, если я функции uncompress укажу на вход указатель на строку СЖАТЫХ 100 байт, а размер буфера для РАСЖАТИЯ я укажу только 1 байт, то гарантируется, что функция uncompress поместить в этот 1 байт - именно РАСЖАТЫЙ Первый байт из СЖАТОЙ строки ?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
14.12.2022, 20:59
Цитата Сообщение от Optimus11 Посмотреть сообщение
Ну так я и спрашиваю, гарантируется ли, что, если я функции uncompress укажу на вход указатель на строку СЖАТЫХ 100 байт, а размер буфера для РАСЖАТИЯ я укажу только 1 байт, то гарантируется, что функция uncompress поместить в этот 1 байт - именно РАСЖАТЫЙ Первый байт из СЖАТОЙ строки ?
Да. Цитата с документации нужна ?

Добавлено через 6 минут
uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. In the case where there is not enough room, uncompress() will fill the output buffer with the uncompressed data up to that point.
...
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
14.12.2022, 21:05
Я не понял зачем ужимать размер ???
Что это дает, кроме дополнительного гемороя ?
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
14.12.2022, 21:08  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Я не понял зачем ужимать размер ???
Что это дает, кроме дополнительного гемороя ?
Если вопрос мне, то я вроде бы не предлагал ужимать размер.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.12.2022, 21:08

Придумать алгоритм сжатия без потери данных
Есть большая последовательность из букв A и B. Придумать алгоритм сжатия без потери данных и алгоритм распаковки. Пример...

Музыкальный фрагмент был записан в формате моно, оцифрован и сохранён в виде файла без использования сжатия данных
6. Музыкальный фрагмент был записан в формате моно, оцифрован и сохранён в виде файла без использования сжатия данных. Размер полученного...

Придумать алгоритм сжатия без потери данных и алгоритм распаковки
Есть большая последовательность из букв A и B. Придумать алгоритм сжатия без потери данных и алгоритм распаковки. Пример...

Динамический массив с возможностью изменения размера без потери данных
Есть ли в c# поддержка динамических массивов аналога: Mass:Array of String; SetLength(Mass, длинна) И желательно чтобы при изменении...

Создать файл ненулевого размера без записи данных в него
Можно как-то создать файл ненулевого размера, не записывая данных в него? Т.е. надо чтобы в файловой системе выделился запрошенный объем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов • Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp • Смежный проект:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru