Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2020, 17:48   #1
Диана5251
Новичок
Джуниор
 
Регистрация: 09.02.2020
Сообщений: 1
По умолчанию Реализовать функцию побитового ИЛИ | между двумя файлами, записать это в один файл в обратном порядке битов на Си\С++

Есть два файла binaryData1.info и binaryData2.info. Нужно реализовать функцию побитового ИЛИ между их содержимом (я так поняла нужно как-то содержимое каждого файла записать в переменную типа int a, int b, int c=a|b). При этом, всё это записать в файл unionbinaryData.info, и чтобы биты были в обратном порядке (младший бит становится старшим и т. д.). Но при этом нельзя использовать функцию Invert, а нужно реализовать своими силами. Я написала такой код, но не работает команда ifstream, не распознаёт почему-то, только через fopen. Через fstream даже файл не открывается. Исправьте, пожалуйста, код, и допишите биты в обратном порядке.

Задание:
Разработать консольное приложение реализующее операцию побитового включающего ИЛИ над содержимым двух бинарных файлов binaryData1.info и binaryData2.info
В каждом байте полученного результата логической операции необходимо инвертировать порядок бит (младший бит становится старшим и так далее)
Результат должен быть помещен в бинарный файл unionBinaryData.info.

Код:
#include <conio.h>
#include <stdio.h>
#include <Windows.h>
#include <stdlib.h>
#include <iostream>
#include<fstream>
#include <string>
#include <sys/stat.h>
int main(void) {
setlocale(LC_ALL, "Russian");
SetConsoleCP(8);
SetConsoleOutputCP(8);
 
FILE *file1;
int number;
file1 = fopen("binaryData1.info", "rb");
fread(&number, sizeof(int), 1, file1);
printf("Содержимое файла1: ");
printf("%d", number);
printf("\n");
fclose(file1);
getch();
 
FILE *file2;
int number2;
file2 = fopen ("binaryData2.info", "rb");
fread(&number, sizeof(int), 1, file2);
printf("Содержимое файла2: ");
printf("%d", number);
printf("\n");
fclose(file2);
getch();
 
int f1, f2;
ifstream doc1, doc2;
ofstream doc3;
doc1.open("binaryData1.info", ios::binary|ios::in);
doc2.open("binaryData2.info", ios::binary|ios::in);
while (!doc1.eof()){
getline(doc1,f1);
}
doc1.close();
while (!doc2.eof()){
getline (doc2, f2);
}
doc2.close();
file3.open("unionbinaryData.info", ios::binary|ios::in);
for (i(0); i<f1.size;i++){
unsigned char ch1=f1[i];
break;
}
for (i(0); i<f2.size;i++){
unsigned char ch2=f2[i];
break;
}
unsigned char ch3=ch1|ch2;
cout<<"побитовое ИЛИ: "<<ch3;
return 0;
}
Диана5251 вне форума Ответить с цитированием
Старый 09.02.2020, 21:54   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

А почему int? Никто не гарантирует, что число байт в файле кратно 4 или даже 2, то логично использовать для операций тип char.
А инверсию я бы делал так:
Код:
   char inv( char arg )
{
   char tmp0,tmp1,tmp2 ;
   tmp0 = ch(0) ;
   tmp1 = ch(1) ;
   tmp2 = ch(128) ;
   do
     { 
        if ((tmp2&&arg)>0 ) tmp0 |= tmp1 ;
        tmp1 << 1 ;
        tmp2 = (tmp2>>1) & ch(127) ;
      } while tmp2 > 0 ;
    return tmp0 ;
}
Не гарантирую, на ++ не писа'л лет 200.
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Записать в файл g компоненты файла f в обратном порядке tane Помощь студентам 4 31.01.2014 23:54
Имеется типизированный файл с тридцатью числами. Записать в другой файл числа имеющегося файла в обратном порядке. Валентин77 Общие вопросы C/C++ 8 17.12.2013 22:53
Записать в файл G компоненты файла F в обратном порядке slay334 Помощь студентам 1 29.03.2013 14:50
Символьный файл F. Записать в файл G компоненты файла F в обратном порядке,сначала все нечетные, затем чётные. Паскаль. ICE_LADY Помощь студентам 0 08.06.2011 17:32
как реализовать функцию для того что бы скопировать элементы одного массива во второй в обратном порядке mansp Общие вопросы C/C++ 8 28.10.2010 15:48