Двоичен вход

Нека разгледаме пример, който демонстрира писане на цели числа от динамичен масив в двоичен файл и четенето им от този файл.

използване на пространство от имена std;

int *mas = нов int[N];

cout (mas), N*sizeof(int));//запис на масив във файл

fout.close(); //затваряне на потока

cout(mas), N*sizeof(int)); //чете масив от файл

for(i=0; i , което преобразува нашия буфер за данни от тип int (mas) в буфер от тип char.

ofstream fout(име на файл, ios::app ios::binary);

Сега е необходимо да обсъдим втория параметър на разглежданите функции. В тази програма като втори параметър използвахме израза N * sizeof (int), с който изчислихме броя на байтовете. Например, ако имаме 5 елемента от масив от цели числа, тогава броят на байтовете ще бъде 20. Функцията sizeof() връща броя байтове, разпределени за типа данни, зададен като параметър. Например sizeof(int ) ще върне 4.

И така, програмата, дадена в този пример, ви позволява да записвате данни в двоична форма във файла bin.dat и да ги четете от този двоичен файл. Освен това след четене тези данни се преобразуват в тип int, придобиват структурата на масив и с тях могат да се извършват всякакви операции.

Сега си представете, че трябва да напишете програма, която ви позволява да четете данни от файла bin.dat, а ние знаем само, че този файл съдържа елементи от целочислен масив в двоична форма.Броят на записаните елементи (N) не ни е известен. Когато създаваме програма, нямаме право да използваме постоянен масив, т.е. разпределете памет за него на етапа на създаване на програмата. Това ще даде грешен резултат. Тъй като твърде малката стойност на N ще доведе до факта, чене всички елементи на масива се броят и твърде голяма стойност на N ще доведе до запълване на допълнителни клетки с произволни стойности.

Помислете за пример на програма, която ви позволява да четете елементи от масив от цели числа от двоичен файл чрез динамично разпределяне на памет и за да докажете реализма на прочетените данни, изчислете тяхната сума.

използване на пространство от имена std;

int N, i, сума=0, dfb; //dfb - дължина на файла в байтове