用ofstream写前面的零

时间:2015-05-09 06:06:45

标签: c++ io ofstream

我正在编写一个程序,它将读取和写入一个文件格式,逐字节地指示文件的内容。这个程序的本质是前两个字节详细说明文件的那一部分剩下多少字节,然后是另外两个字节,表示文件的一部分实际代表的内容。对于文件的长度重复该模式。这意味着我必须编写由前面的零缓冲的确切数字,这样每个组件都是它需要的确切大小。我写了一个虚拟文件来说明我的观点:

#include <fstream>
#include <stdint.h>

int main() {
  std::ofstream outputFile;
  outputFile.open("test.txt", 
          std::ios::out | std::ios::ate | std::ios::binary);
  const int16_t HEADER = 0x0002;
  int16_t recordSize = 2*sizeof(int16_t);
  int16_t version = 0x0258;
  outputFile << recordSize << HEADER << version;
  outputFile.close();
}

写一个名为&#34; test.txt&#34;的文件。谁的十六进制内容是:

34 32 36 30 30

对于我们这些可以阅读直接十六进制的人来说,这意味着:

42600

正如您所看到的,前面的零被删除,我的记录不是我希望的。有没有办法使用ofstream来用零填充我的数字,因为我天真地试图通过使用int16_t来完成我想要的两个字节长的所有写入?还有另一种,可能更风格的正确方法吗?

1 个答案:

答案 0 :(得分:2)

运营商LT;&LT;用于文本格式。你可能想要使用.write()代替。

e.g。

outputFile.write(reinterpret_cast<char*>(&recordSize), sizeof(int16_t));
outputFile.write(reinterpret_cast<char*>(&HEADER), sizeof(int16_t));
// ...