将内存缓冲区写入 std::stringstream
Writing a memory buffer to std::stringstream
>我有一个表示内存缓冲区的类
class Buffer
{
public:
Buffer(const char* buffer, size_t size)
:m_buffer(buffer), m_size(size)
{
}
const char* m_buffer;
size_t m_size;
};
我需要在此类上重载operator<<
,以便可以将其写入这样的std::stringstream
char arr[] = "hello world";
Buffer buf(arr, 11);
std::stringstream ss;
ss << buf;
我该怎么做?请注意,内存缓冲区之间可能有 NULL
个字符。另外,由于内存缓冲区可能很大,我想避免制作任何额外的副本(除了复制到字符串流中)。
写入流始终是对输出流完成的。
例如,如果您看到此std::stringstream
引用,您将看到它继承自从std::ostream
继承的std::iostream
(以及从std::istream
继承)。
这意味着您只需像这样重载它:
class Buffer
{
public:
...
friend std::ostream& operator<<(std::ostream& os, Buffer const& buf)
{
// Code to write the buffer to the stream...
}
};
当然,这种重载意味着您可以使用 Buffer
类写入任何输出流。
重载函数中写入数据所需的确切内容取决于数据。它可以是任何通用二进制数据,那么您可能应该使用 std::ostream::write
.否则,您可以只使用例如 std::string
充当中间人:
return os << std::string(m_buffer, m_size);
当然,您需要确保缓冲区不为空或为空指针。
在
operator<<
重载中使用std::ostream::write
()将缓冲区写入std::ostream
。
这将写入所有内容,空字节等。
相关文章:
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- std::stringstream 返回字符 *
- std::stringstream::flush() 应该做什么吗?
- 静态 std::stringstream 的叮当整警告
- 为什么 {fmt} 比 std::stringstream 慢?
- C++命令末尾的 std::stringstream 空格
- 返回 std::stringstream - 编译失败
- 流从STD :: Stringstream带有空间的流
- 用std :: stringstream inline代替字符
- C STD :: Stringstream操作优化
- What value should `std::stringstream::fail()` return after r
- 使用Boost Karma替换STD :: stringstream double到STD :: String Conv
- 从 std::stringstream 读取uint8_t为数字类型
- 重置std :: stringstream格式标志
- 如何将“char *”深度复制到std::stringstream
- 将内存缓冲区写入 std::stringstream
- 如何初始化 std::stringstream
- STD :: Stringstream一次仅支持一个输入
- 用std :: stringstream读取/写作无符号字节
- 使用std :: stringstream将boost :: int64_t转换为字符串