将二进制文件中的数值存储到数组-C ++中

时间:2014-11-04 12:42:30

标签: c++ file-io binary

我正在尝试从包含100个double值的二进制文件中读取数值数据,并将其存储在名为myArray的数组中。当我打印myArray时,没有显示任何内容,就像myArray从未被填充过一样。任何帮助表示赞赏。

int main() 
{
    int file_len; 
    ifstream infile; 
    infile.open("mybinfile.bin", ios::binary | ios::in); 
    if (!infile.is_open()) 
    {
    cout << "Error in opening the file. " << endl;
    }
    else
    {
        const int file_len = 100;

        std::vector<char> myVect;
        myVect.resize(file_len);

        int i = 0;
        infile.read((char *) (&temp), sizeof(char));
        myVect[i] = temp;
        while(!infile.eof())
        {

            myVect[i] = temp;
            i++;
            infile.read((char *)  (&temp), sizeof(char));
        }
        for (int i = 0; i < 100 ; i++)
        {cout << i << ": " << myVect[i]<< endl;}
    }    
    infile.close();

return 0;
} 

2 个答案:

答案 0 :(得分:1)

下面

infile.read((char*)&myArray, file_len * sizeof(double));

指针传递给指针以使其加倍。它应该是

infile.read((char*)myArray, file_len * sizeof(double));

让我想知道为什么你没有看到崩溃,因为写入随机存储器几乎不会很好。

答案 1 :(得分:1)

这是蛮力序列化和反序列化的一个例子。注意,序列化通常是棘手的,因为例如字节序,不同的浮点格式,十进制文本表示和二进制等之间的转换。

#include <fstream>

using std::string;
using std::ofstream;
using std::ifstream;
using std::cout;

string fname("/tmp/doubles.bin");

void write_doubles()
{
    ofstream of;
    of.open(fname.c_str(), std::ios::binary | std::ios::out);

    double arr[100];

    for (int i = 0; i < 100; i++)
    {
        arr[i] = static_cast<double>(i+100);
    }

    of.write((char*)arr, 100*sizeof(double));
}

void read_doubles()
{
    ifstream ifs;
    ifs.open(fname.c_str(), std::ios::binary | std::ios::in);

    double arr[100];
    ifs.read((char*)arr, 100*sizeof(double));


    for (int i = 0; i < 100; i++)
    {
        cout << "Arr[i]: " << arr[i] << ", ";
    }

    cout << '\n';


}

int main()
{
    write_doubles();
    read_doubles();

    return 0;
}