c++ - 将缓冲区转换为字符串 C++ boost

标签 c++ string boost buffer

我写过客户端服务器通信。然而,在 C++ 客户端上解析我的缓冲区时,我丢失了大部分数据。我已经了解问题所在但仍然不知道如何解决: 代码:

            std::cout << b.max_size() <<std::endl;
    boost::asio::streambuf::mutable_buffers_type bufs = b.prepare(50000);
    size_t n = socket.receive(bufs);
    // received data is "committed" from output sequence to input sequence
    b.commit(n);
    std::istream is(&b);
    std::string s;
    is >> s;

我分配的缓冲区大小 = 5000(最大大小为 429496)。我在 b.commit(n); 这行的问题std::istream 是(&b);并且字符串 s 的大小为 119,这是 Not Acceptable 。

最佳答案

如果你想得到整个缓冲区,这样做:

streambuf::const_buffers_type bufs = b.data();
std::string s(buffers_begin(bufs), buffers_begin(bufs) + b.size());

或者像这样:

streambuf::const_buffers_type bufs = b.data();
std::string s(buffers_begin(bufs), b.size());

或者:

string s(buffer_cast<const char*>(b.data()), b.size());

可以找到相应的文档here .

关于c++ - 将缓冲区转换为字符串 C++ boost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24414658/

相关文章:

python - TypeError:NoneType 和 str 不支持的操作数类型

python - Storbinary 格式字符串 Python3 FTPLib

c++ - boost::filesystem::exists 在带有 boost v1.75 的 CentOS 8 docker 上抛出操作不允许异常

c++ - 模板偏特化问题

c++ - 程序在 Ubuntu 14.04 和 GCC 中编译不正确

c - 指针和 printf

c++ - 如何使 boost::serialization 反序列化更快?

c++ - Boost智能指针和std智能指针有什么区别?

c++ - 带有引用参数的模板结构构造器

c++ - 欧拉计划 3 - 最高质因数