Форум программистов, компьютерный форум CyberForum.ru

Работа с файлом в виде двоичного кода - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ В заданной строке определить количество слов (в строке может содержаться несколько пробелов подряд). http://www.cyberforum.ru/cpp-beginners/thread549678.html
В заданной строке определить количество слов (в строке может содержаться несколько пробелов подряд).
C++ Скопировать массив байт в структуру Доброе время суток! Помогите пожалуйста разобраться с такой вот проблемой - есть структура с двумя полями: struct MyStruct { unsigned char id; unsigned short num; http://www.cyberforum.ru/cpp-beginners/thread549662.html
C++ lib от PureBasic
Задача: есть lib, созданная в PureBasic'e. Известны функции, количество параметров в каждой из них. Нужно написать хэдер и прикрутить к проекту на C++. PS. Прошу не бросаться тазиками, ибо сам знаю, что вопрос дурацкий.
C++ Закрытое наследование
Добрый день, форум:) Помогите разобраться: Базовый класс vector и от него наследую допустим "очередь" , и.. когда хочу в очереди создать переменную интовую, пишет : 'queue::how' : only static const integral data members can be initialized within a class
C++ Измерить скорость воздушного потока http://www.cyberforum.ru/cpp-beginners/thread549641.html
1. Нужно сделать программу, в начале которой запускался бы таймер и программа работала бы бесконечно. 2. Нужно измерить скорость воздушного потока. Спасибо
C++ Численный метод простой итерации решения СЛАУ Задача звучит так: Разработать ПО для реализации численного метода простой итерации решения СЛАУ. Для примера использовать следующие данные: / x1=0.23x1-0,04x2+0,21x3-0,18x4+1,24; | x2=0,45x1-0,23x2+0,06x3-0,88; | x3=0,26x1+0,34x2-0,11x3+0,62; \ x4=0,05x1-0,26x2+0,34x3-0,12x4-1,17. Помогите пожалуйста решить. подробнее

Показать сообщение отдельно
S_hmel
3 / 3 / 0
Регистрация: 14.02.2012
Сообщений: 82

Работа с файлом в виде двоичного кода - C++

16.04.2012, 13:02. Просмотров 1166. Ответов 14
Метки (Все метки)

Здравствуйте. Продолжаю работу над внедрением в картинку TIFF текстового файла. Собственно говоря, задача №1 - считать текст из файла в последовательность нулей и единиц побайтно. Т.е., необходимо, чтобы 0 и 1 были в группах по 8 штук в каждой.

Вот написал код чтения из файла с выводом результатов на экран:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <vcl.h>
#include <stdio.h>
#include <iostream.h>
#pragma hdrstop
 
#include <tchar.h>
//---------------------------------------------------------------------------
 
#pragma argsused
 
FILE *SecretFile;              //указатель на скрываемый файл
FILE *NextFile;                //указатель на сохраняемый файл
BYTE *textbuf;                 //буфер файла
 
unsigned int FILE_SIZE = 0;                        //размер файла
BYTE *bitarray = new BYTE[8];                   //массив для одного байта - 8 элементов (каждый является битом)
BYTE *bitsbuf;                                         //планировался как массив для всего файла, состоящий из последовательно помещенных
                                                             //в него массивов bitarray, каждый раз с новыми значениями 
BYTE *ByteToBinary (BYTE val);                  //вспомогательные функции
BYTE BinaryToByte (BYTE *mass);
//---------------------------------------------------------------------------
 
void main(int argc, char argv[])
{
  /* Открывает файл для чтения */
  cout<<"Opening file"<<endl;
  cin.get();
  
//само окрытие
if ((SecretFile = fopen ("c:\\test.txt", "r")) == NULL){
    cout<<"Could not to open file!!!"<<endl;
    cin.get();
  }
else cout<<"Successfully opening"<<endl;
cin.get();
  
//определение размера файла
  fseek(SecretFile, 0, SEEK_END); //узнать конец файла
  FILE_SIZE = ftell (SecretFile); //определить его размер
  fseek(SecretFile, 0, SEEK_SET); //поставить указатель назад
 
  //выделение памяти под файл - инициализация массива textbuf
if ((textbuf = (BYTE*) malloc(sizeof(BYTE) * FILE_SIZE )) == NULL){
 cout<<"Failed to malloc for file"<<endl;
  cin.get();
 }
else cout<<"Successfully malloc for file"<<endl;
 cout<<"Filesize is "<<FILE_SIZE<<" bytes";
cin.get();
  
//считать файл в буфер
   size_t count = FILE_SIZE;
   size_t size = 1;
if (fread(textbuf, size, count, SecretFile) != count){   //чтение в буфер байты файла 
  cout<<"Error of reading file!!!"<<endl;
   cin.get();
  }
 
else cout<<"Successfylly reading to memory!!!"<<endl;
cin.get();
unsigned int i = 0;
int j = 0;
 
for (i = 0; i < count; i++) {
 
       bitarray = ByteToBinary (textbuf[i]);              преобразовать данные буфера в биты
       printf ("> Byte %d : <", i);
       for (j = 0; j < 8; j++) {
            printf ("%d", bitarray[j]);
       }
 
      }
   cout<<endl;
 
 
 cout<<endl<<endl;
 cin.get();
 fclose(SecretFile);                              //закрытие исходного файла
}
Функция разложения на биты:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
BYTE *ByteToBinary (BYTE val)
/* Разбивает исходный Байт на биты. Возвращает массив из восьми элементов
   Каждый Nй элемент соответствует Nму биту.
   Принимает значения 1 или 0
*/
{           BYTE *mass = new BYTE[8];
            int t, i;
            for (t = 128, i = 0; t > 0; t /= 2, i++)
            {
                if ((val & t) != 0) mass[i] = 1;
                else if ((val & t) == 0) mass[i] = 0;
            }
  return mass;
}
Выдает такой результат для текстового файла размером 114 байт (см. вложение).

Но ведь мне надо манипулировать с битами. Записывать их в изображение, а потом изымать и записывать в файл, чтобы получить исходный текст.

Главный мой вопрос - как организовать сохранение массива bitarray в больший массив, который будет содержать в себе весь файл в двоичном виде?
Миниатюры
Работа с файлом в виде двоичного кода  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru