Побитовое чтение текстового файла - 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();
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы:
    • для работы с файловыми дескрипторами;
    • для работы с вводом/выводом;
    • для работы с ошибками;
    • для работы с стандартным вводом/выводом;
    • для работы с клавиатурой и курсором;
    • для работы со строками;
    • для работы с библиотекой стандартных функций.
  2. Создаем функцию chkerr(int res), которая проверяет результат выполнения операции с файлом. Если результат равен -1, выводится сообщение об ошибке и программа завершается с кодом ошибки.
  3. Создаем функцию main(), которая является точкой входа в программу.
  4. Инициализируем массив из 3-х файловых дескрипторов fp[3] = { 0 }.
  5. В цикле for открываем два файла из массива filename и fp.
  6. Считываем 4 байта из файла input1.bin в переменную reg.
  7. В цикле while считываем по одному байту из файла input0.bin и XOR'ем его с текущим значением reg, затем записываем полученный байт в файл output.bin.
  8. Закрываем оба файла из массива fp.
  9. Ждем нажатия клавиши с помощью _getch().
  10. В данном коде предполагается, что файлы input1.bin и input0.bin существуют в той же директории, что и запускаемый файл.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.786 из 5
Похожие ответы