相当于二进制数据的字符 * 的 fwrite

Equivalent of fwrite for char * for binary data

本文关键字:fwrite 字符 相当于 数据 二进制      更新时间:2023-10-16

有没有等效的fwrite来写入char *数组?我尝试了字符串流,但它似乎没有完全相同的作用。我可以使用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, worldn";
    std::cout << "wrote " << (sbuf.end() - buffer) << " bytesn";
}

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

如果你想显式地传入大小和计数,你可以围绕memcpy创建一个轻量级的包装器(内联函数或宏),它保留与fwrite相同的参数。

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