用于二进制数据的char *的fwrite的等价物

时间:2013-09-06 21:31:36

标签: c++ arrays char

是否有相当于fwrite用于写入char *数组?我尝试过stringstream但它似乎并没有完全相同。我可以使用memcpy,但我正在失去对计数的追踪......

澄清要写入的数据可能只有nul。我想

write(array, &someint, 4);
write(array, &bunchofdata, sizeof(bunchofdata));
write(array, somestring, somestring.length());

并继续增加偏移量。

2 个答案:

答案 0 :(得分:2)

创建写入固定大小缓冲区的流缓冲区非常容易。获得流缓冲区后,可以在为其构建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";
}

显然,您也可以使用未格式化的流操作。

答案 1 :(得分:0)

如果要显式传递大小和计数,可以在memcpy周围创建一个轻量级包装器(内联函数或宏),保存与fwrite相同的参数。

#define memwrite(buffer, size, count, destination) \
    memcpy(destination, buffer, (size) * (count))