Как записать массив

X={6;4;-5;-8;-1;4;8;4;-6;8;6;2;-4;7} в двоичный файл data.file? в с++


Ответы (2 шт):

Автор решения: Janbyr
#include <iostream>
#include <iterator>
#include <fstream>
#include <algorithm>
 
int main() 
{
    std::ofstream stream("Data.file");
    int a[] = {6,4,-5,-8,-1,4,8,4,-6,8,6,2,-4,7};
    int b[5];
    std::copy(a, a + 14, std::ostream_iterator<int>(stream, " "));
    stream.close();
    int count = 0;
    std::ifstream ifstr("Data.file");
    while (!ifstr.eof())
        ifstr >> b[count++];
    std::copy(b, b + --count, std::ostream_iterator<int>(std::cout, " "));
    ifstr.close();
    return 0;
}
→ Ссылка
Автор решения: DmitryK

Потому что вы открываете файл не в бинарном режиме, а текстовом. В бинарном будет вот так:

std::ofstream stream("Data.file", std::ios::binary); // запись
std::ifstream ifstr("Data.file", std::ios::binary); // чтение

И зачем такие сложности с copy()? Для записи в бинарном режиме подходит write(), чтение - read(). Первый параметр указатель куда считывать, второй параметр - количество байт.

 stream.write(a, sizeof(a)); // записать 56 байт (14 элементов по 4 байта)
 ifstr.read(&b[count], sizeof(int)); // считывать по одному int
 ifstr.read(b, 5 * sizeof(int)); // считать сразу 5 int и записать с b[0] 
по b[4]

→ Ссылка