Побитовое чтение текстового файла - C (СИ)
Формулировка задачи:
Здравствуйте, перейдем сразу к делу:
Нужно побитово считать текстовый файл и далее к каждому биту применить (через XOR) число из другого файла.
Помогите реализовать это.
Решение задачи: «Побитовое чтение текстового файла»
textual
Листинг программы
#include <fcntl.h>
#include <io.h>
#include <errno.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
int chkerr(int res)
{ if (res == -1)
{cputs(strerror(errno)); exit(errno);}
return res;
};
void main()
{
int fp[3] = { 0 };
int i,reg = 0;
char ch = '\0';
const char* filename[3] = { "input1.bin", "input2.bin", "output.bin" };
const int mode[3] = {O_RDONLY|O_BINARY,O_RDONLY|O_BINARY,O_RDWR|O_CREAT|O_BINARY};
for (i = 0; i < 2; i++)
fp[i] = chkerr(_open(filename[i],mode[i]));
_read(fp[1],®,sizeof(reg));
while (_read(fp[0], &ch, sizeof(ch)) == sizeof(ch))
{ch = ch ^ reg;
_write(fp[2],&ch,sizeof(ch));}
for (i = 0; i < 2; i++)
_close(fp[i]);
_getch();
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
для работы с файловыми дескрипторами; для работы с вводом/выводом; для работы с ошибками; для работы с стандартным вводом/выводом; для работы с клавиатурой и курсором; для работы со строками; для работы с библиотекой стандартных функций.
- Создаем функцию chkerr(int res), которая проверяет результат выполнения операции с файлом. Если результат равен -1, выводится сообщение об ошибке и программа завершается с кодом ошибки.
- Создаем функцию main(), которая является точкой входа в программу.
- Инициализируем массив из 3-х файловых дескрипторов fp[3] = { 0 }.
- В цикле for открываем два файла из массива filename и fp.
- Считываем 4 байта из файла input1.bin в переменную reg.
- В цикле while считываем по одному байту из файла input0.bin и XOR'ем его с текущим значением reg, затем записываем полученный байт в файл output.bin.
- Закрываем оба файла из массива fp.
- Ждем нажатия клавиши с помощью _getch().
- В данном коде предполагается, что файлы input1.bin и input0.bin существуют в той же директории, что и запускаемый файл.