【发布时间】:2016-11-22 17:08:59
【问题描述】:
我再次需要您的帮助来保存和读取二进制数据。我有一个vector<<complex> > xy(256),它从硬件中读取了 10 次:
vector<<complex> > xy(256);
ofstream outfile2 (outfilename2.c_str() , ofstream::binary);
....
....
for(unsigned t = 0; t < 10; t++)
{
....
....
for(unsigned i = 0; i < 256; i++)
{
xy[i] = f[i] * conj(g[i]);
}
for(unsigned i = 0; i < 256; i++)
{
outfile2 << boost::format("%20.8e") % xy[i]<< endl; // write in text
}
} // the text data will be 2560 lines of complex data, for example:
// (6.69635350e+06,7.34146150e+06)
现在,我正在尝试使用以下命令保存到二进制文件中:
for(unsigned i = 0; i < 256; i++)
{
outfile2.write((const char*)& xy[i], 1 * sizeof(complex<short>));
outfile2.flush();
}
虽然它仍然给我一个数据,但是当我与原始文本数据进行比较时,它们是不同的。我不明白为什么?
我想用浮点数据读取复数 16。
希望大家帮忙
非常感谢。
【问题讨论】:
-
@Sergey Sergey 我希望你能在这个问题上帮助我,我仍然对二进制数据感到困惑。非常感谢。
-
“当我与原始文本数据进行比较时,它们是不同的” 不同如何?请发布示例输出(加上您的预期)。还有你是怎么比较的?
-
&xy[i] 也许有道理,也许没有。 vector 不是经典的 C 数组。并且索引运算符是“模拟的”
-
@UnholySheep 这是一个输出:(-28153,20316) (23951,20299)(-23260,20281) (10184,20268) (12796,20245) 有 2560 行。我期望复杂的数据必须是: (1.00663576e+08,2.21873700e+07) (1.96770960e+07,7.86981300e+06) (1.48334580e+07,1.66604570e+07) (4.34163400e+07, 3.11434200e+07) (3.44546400e+07,3.15276640e+07)
-
@UnholySheep 和我试图读取二进制数据的代码: ifstream input(filename.c_str() , std::ios::binary | std::ios::in);矢量>矢量(矢量大小); input.seekg(0, ios::beg); input.read(reinterpret_cast
(vector.data()), (2650 * sizeof(complex )));
标签: c++