我试图在二进制文件中写一些数据。
确切地说,我正在写一个1 int
和2 double
的连续。
我正在使用的代码如下:
if (with_size)
FileStream.write(reinterpret_cast<char*>(const_cast<int*>
(&this->m_)), sizeof(int));
FileStream.write(reinterpret_cast<char*>(this->data_),
this->m_ * sizeof(value_type));
使用创建文件流
ofstream file(file_name.c_str(), ofstream::app);
我已经尝试使用ofstream::binary
来确定但它不会改变错误的行为。
现在的错误:有时,在数据中,我有一个额外的八位字节。这是我所见过的双重内容之一,在写作之后从未出现过。
我确定的是:
this->m_ = 2
所以
this->m_ * sizeof(value_type) = 16
this->data_
是指向有效值的有效指针
每次写作都不会发生,但每次运行都会发生(第一次是第3次写作)
它只发生在我在Windows 7下的visual c ++ 2008下的编译中,我在ubuntu下的gcc-5.2和4.6工作得很好。
这是我得到的一个例子(罪魁祸首是在第3行的末尾; 0d)
00000000: 0200 0000 0000 0000 0000 e03f 0000 0000 ...........?....
00000010: 0000 e03f 0200 0000 0000 0000 0000 e03f ...?...........?
00000020: c1ca a145 b6f3 df3f 0200 0000 cd5a 0d0a ...E...?.....Z..
00000030: 48fb ffdf 3fb5 3a39 4371 e7df 3f
我想要的是什么:
00000000: 0200 0000 0000 0000 0000 e03f 0000 0000 ...........?....
00000010: 0000 e03f 0200 0000 0000 0000 0000 e03f ...?...........?
00000020: c1ca a145 b6f3 df3f 0200 0000 cd5a 0a48 ...E...?.....Z.H
00000030: fbff df3f b53a 3943 71e7 df3f
感谢您的时间