使用ofstream将整数作为十六进制写入文件

xen*_*xen 0 c++ binary ofstream

我有一个定义如下的函数:

void AddHeadCode(std::ofstream &ostream, size_t length){
ostream.write((char*)length, sizeof(length));
ostream.seekp(0x10L, std::ios::beg);
}
Run Code Online (Sandbox Code Playgroud)

现在当它执行时,它会明显失败...因为char指针将无处指向.但我希望实际的指针值写入文件.像length = 19152然后当我在HEX编辑器中打开文件时,我应该在那里找到0d4a.

如何在c ++中实现?我有点迷失在这里......

Rob*_*obᵩ 5

获取length变量的地址,并将该地址传递给.write:

void AddHeadCode(std::ofstream &ostream, size_t length){
  // by popular demand, removed C-style cast
  ostream.write(reinterpret_cast<char*>(&length), sizeof(length));
  ostream.seekp(0x10L, std::ios::beg);
}
Run Code Online (Sandbox Code Playgroud)

但是,这通常不是指写为"十六进制"的整数.这有时被称为将整数写为"二进制",或者只是写一个整数.

请注意,您所做的不是便携式练习.如果您在另一台计算机上(或者甚至在同一台计算机上,但使用不同的编译器)重新读取该值,则可能无法读取相同的值.

  • 我会使用`reinterpret_cast <char*>(&length)`. (4认同)
  • @Rob:重新解释! (2认同)