Код C для сжатия и распаковки входного файла
Привет,
Я проблема, с которой сталкиваются.
Мне нужно написать функцию компания() это считывает текстовый файл символов ASCII и записывает в сжатом виде эти символы в другой файл.
Логика сжатия для comp() должна использовать тот факт, что ASCII использует только нижние (наименее значимые) семь битов 8-битного байта. Логика сжатия должна просто выдавить 8 - й бит. Ниже описаны алгоритмы для реализации этой логики сжатия в comp().
Алгоритм:
Программа должна рассматривать выходные данные как поток битов, и 7 битов данных из каждого входного байта должны просто передаваться в выходной битовый поток, а 8-й бит отбрасывается. 7 битов данных должны быть отправлены в выходной поток в порядке возрастания значимости: бит 0 (наименее значимый) первым, бит 1 следующим и так далее.
Конечно, выходные данные на самом деле представляют собой последовательность байтов, поэтому логический выходной битовый поток должен быть упакован в выходные байты. Битовый поток упаковывается в байты путем присвоения битов возрастающей позиции бита (возрастающей значимости) внутри байта и перехода к следующему байту, когда верхний бит был заполнен текущим байтом. В конце файла, если в текущем байте есть пустые позиции битов, то перед выводом байта заполните их нулями.
Например, файл, состоящий из байтов 53 7F 63 4B, должен быть "сжат" в файл, содержащий D3 FF 78 09. (Этот файл слишком мал, чтобы получить что-либо от этой простой техники сжатия.
---------
Другая функция разложение(), который будет считывать сжатый файл (может быть создан функцией comp())
и распакует его. Программа должна просто воспроизвести файл ASCII, из которого были получены ее входные данные (предполагая, что исходный файл был допустимым файлом ASCII с 8-м битом всегда 0).