ofstream.write写一个额外的八位字节

时间:2015-09-23 09:03:45

标签: c++ std ofstream

我试图在二进制文件中写一些数据。 确切地说,我正在写一个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

感谢您的时间

0 个答案:

没有答案