Чтение bmp-файла для стеганографии
Вопрос
Я пытаюсь прочитать bmp-файл на C ++ (Turbo).Но я не могу распечатать двоичный поток.
Я хочу закодировать в него текстовый файл и расшифровать его.Как я могу это сделать?Я читал, что заголовок bmp-файла имеет размер 54 байта.Но как и куда я должен добавить текстовый файл в bmp-файл.?
Я знаю только Turbo C ++, поэтому для меня было бы полезно, если бы вы предоставили решение или предложение, связанное с темой для того же самого.
int main()
{
ifstream fr; //reads
ofstream fw; // wrrites to file
char c;
int random;
clrscr();
char file[2][100]={"s.bmp","s.txt"};
fr.open(file[0],ios::binary);//file name, mode of open, here input mode i.e. read only
if(!fr)
cout<<"File can not be opened.";
fw.open(file[1],ios::app);//file will be appended
if(!fw)
cout<<"File can not be opened";
while(!fr)
cout<<fr.get(); // error should be here. but not able to find out what error is it
fr.close();
fw.close();
getch();
}
Этот код работает нормально, когда я передаю текстовый файл в двоичном режиме
Редактировать :
while(!fr)
cout<<fr.get();
Я не могу видеть двоичные данные в консоли это нормально работало для текста, когда я передавал символьный параметр в fr.get(c)
Решение
Я думаю, что на ваш вопрос уже дан ответ:Выведите значение int в двоичном представлении с помощью C
преобразуйте ваш символ в int, и все готово (по крайней мере, для выходной части).
Другие советы
Со стеганографией, насколько я мало о ней знаю, вы не "добавляете" текст.Вы вносите незначительные изменения в пиксели (затенение и т.д.), Чтобы скрыть что-то, что визуально не очевидно, но должно иметь возможность обратного дешифрования путем изучения пикселей.Не должно иметь никакого отношения к заголовку.Так или иначе, смысл моего в противном случае бесполезного ответа состоит в том, чтобы побудить вас перейти и изучить тему, на которую вы ищете ответы, чтобы вы могли разработать свое решение, а затем прийти и спросить подробности о реализации.
Вам нужно изменить битовый шаблон, а не добавлять какой-либо текст к файлу.Один простой пример :Прочитайте растровое содержимое (после заголовка) и пожертвуйте битом из каждого байта, чтобы сохранить ваше содержимое
Если в Windows, перекодируйте, чтобы использовать CreateFile и посмотреть, в чем реальная ошибка.Если в Linux, то же самое для open(2).После того, как вы отладите проблему, вы, вероятно, сможете вернуться к iostreams.