Запись бит в бинарный файл - C (СИ)
Формулировка задачи:
подскажите как можно реализовать побитовую запись в бинарный файл. например имеется строка 0101010001011111010100101010101011001101, она занимает 40 бит или 5 байт, как я не пытался записать объем выходного файла 40 байт а мне надо чтобы было 5 байт, это нужно для сжатия данных
Решение задачи: «Запись бит в бинарный файл»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
char* GetBits(unsigned char byte, char bits[])
{
size_t i;
for (i = 0; i < 8; ++i)
{
bits[7 - i] = (byte & 1) ? '1' : '0';
byte >>= 1;
}
return bits;
}
int main()
{
FILE* f = fopen("file.bin", "rb");
if (f == NULL)
{
perror("file.bin");
return EXIT_FAILURE;
}
char bits[9] = { 0 };
unsigned char byte;
while (fread(&byte, 1, 1, f) == 1)
{
printf("%s", GetBits(byte, bits));
}
fclose(f);
return EXIT_SUCCESS;
}
Объяснение кода листинга программы
- Программа начинается с подключения необходимых библиотек (stdio.h и stdlib.h).
- В функции GetBits происходит получение битов из байта и запись их в строку bits.
- В функции main происходит открытие файла
file.binдля чтения. - Если файл не может быть открыт, то выводится сообщение об ошибке и программа завершается.
- Создается массив bits размером 9 символов со значением 0.
- В цикле while происходит чтение байта из файла и вызов функции GetBits для получения битов.
- Результат выводится на экран.
- Файл закрывается.
- Программа завершается с успехом.