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

时间:2012-04-05 14:48:21

标签: c++ binary ofstream

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

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

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

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

2 个答案:

答案 0 :(得分: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);
}

但是,这通常不是指将整数写为“十六进制”。这有时被称为将整数写成“二进制”,或者只是写一个整数。

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

答案 1 :(得分: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