Библиотека zlib, которую используют все, раздута среди других проблем (для встроенных). Я уверен, что это не сработает для вашего случая. У меня было немного больше памяти, может быть, 16K, и я не мог заставить его соответствовать. Он распределяет и обнуляет большие куски памяти и сохраняет копии содержимого и т. Д. Алгоритм может сделать это, но найти существующий код - задача.
Я пошел с http://lzfx.googlecode.com Цикл декомпрессии крошечный, это более старое сжатие типа lz, которое опирается на предыдущие результаты, поэтому вам нужно иметь доступ к несжатым результатам ... Следующий байт 0x5 следующий байт - 0x23, следующие 15 байтов - копия 15 200 байт назад, следующие 6 байтов - копия 127 назад ... более новый алгоритм lz основан на таблице переменной ширины, которая может быть большой или увеличиваться в зависимости от того, как реализовано.
Я имел дело с повторяющимися данными и пытался сжать несколько К до нескольких сотен, я думаю, что сжатие составило около 50%, не очень хорошее, но выполнило свою работу, и процедура распаковки была крошечной. Приведенный выше пакет lzfx не такой большой, как zlib, как две основные функции, в которых есть код, а не десятки файлов. Скорее всего, вы можете изменить глубину буфера, возможно, улучшить алгоритм сжатия, если хотите. Мне действительно пришлось изменить код распаковки (например, 20 или 30 строк кода), чтобы он был тяжелым по указателю, и я переключил его на массивы, потому что в моей встроенной среде указатели были в неправильном месте. Burns может быть дополнительный регистр или нет в зависимости от того, как вы реализуете его и ваш компилятор. Я также сделал это, чтобы можно было абстрагировать выборки и хранилища байтов, так как я упаковал их в память, не адресуемую байтами.
Если вы найдете что-то лучшее, пожалуйста, опубликуйте это здесь или отправьте мне запрос через stackoverflow, меня также очень интересуют другие встроенные решения. Я довольно долго искал, и вышеизложенное было единственным полезным, которое я нашел, и мне повезло, что мои данные были такими, что они сжимались достаточно хорошо, используя этот алгоритм ... пока.