我有一个定义如下的函数:
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 ++中实现?我有点迷失在这里......
答案 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