写入 char * 数组是否有等效于 fwrite 的方法?我尝试了 stringstream,但它似乎并没有完全一样。我可以使用 memcpy,但我忘记了计数...
澄清要写入的数据可能包含 nul。我想要
write(array, &someint, 4);
write(array, &bunchofdata, sizeof(bunchofdata));
write(array, somestring, somestring.length());
并不断增加偏移量。
创建写入固定大小缓冲区的流缓冲区非常容易。一旦你有了一个流缓冲区,你就可以在为它构造一个流缓冲区之后使用正常的流操作来写入std::ostream
它。例如:
struct membuf
: std::streambuf
{
membuf(char* base, std::size_t size) { this->setp(base, base + size); }
char* end() { return this->pptr(); }
};
int main()
{
char buffer[12345];
membuf sbuf(buffer, sizeof(buffer);
std::ostream out(&sbuf);
out << "hello, world\n";
std::cout << "wrote " << (sbuf.end() - buffer) << " bytes\n";
}
显然,您也可以使用未格式化的流操作。
如果您想显式传递大小和计数,您可以在 memcpy 周围创建一个轻量级包装器(内联函数或宏),以保持与 fwrite 相同的参数。
#define memwrite(buffer, size, count, destination) \
memcpy(destination, buffer, (size) * (count))