0

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

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

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

这如何在 C++ 中实现?我有点迷路了……

4

2 回答 2

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);
}

但是,这通常不被称为将整数写入“十六进制”。这有时被称为将整数写入“二进制”,或简单地写入整数。

请注意,您所做的不是便携式练习。如果您在另一台计算机上读回该值(甚至在同一台计算机上,但使用不同的编译器),您可能不会读入相同的值。

于 2012-04-05T14:52:46.997 回答
0

文件流很棘手,所以我不确定,但我将它用于字符串流:

std::basic_stringstream<wchar_t> oTmpStream;
oTmpStream << L"0x" << std::nouppercase << std::setfill( L'0' ) << std::hex << std::setw( 8 ) << iSomeValue

// or without fancy formatting;
oTmpStream << std::hex <<  iSomeValue
于 2012-04-05T14:58:03.560 回答