我正在尝试从包含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;
}
答案 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;
}