【问题标题】:boost::asio::buffer how to iterate over the bytesboost::asio::buffer 如何遍历字节
【发布时间】:2017-07-31 14:57:03
【问题描述】:

我正在尝试实现一个函数,该函数采用 boost::const_buffer 并在循环中迭代其字节。我看到有一个缓冲区迭代器,但它似乎适用于 boost::asio::buffers_type。我没有找到任何简单遍历缓冲区的示例。

那么,通过buffer_cast访问缓冲区为char*等本机类型,然后通过传统方法遍历,是不是标准的方式呢?或者是否有任何直接的帮助函数可以做到这一点?

【问题讨论】:

    标签: c++ boost boost-asio


    【解决方案1】:

    boost::asio::buffer_cast<>

    #include <boost/asio.hpp>
    #include <string>
    #include <iostream>
    #include <algorithm>
    #include <iterator>
    
    namespace asio = boost::asio;
    
    void test(asio::const_buffer const& buffer)
    {
        auto first = asio::buffer_cast<const char*>(buffer);
        auto last = first + asio::buffer_size(buffer);
    
        std::copy(first, last, std::ostream_iterator<char>(std::cout));
        std::cout << std::endl;
    }
    
    int main()
    {
        std::string s = "hello";
    
        test(asio::buffer(s));
    }
    

    【讨论】:

    • 好的,所以基本上提取本机数据并对其进行迭代。
    • @MupparthyRavindranath 是的,const_buffer 是单个字节缓冲区。 const_buffers_1ConstBufferSequence 概念的模型,包含 1 个缓冲区(其 end() 等于其 begin() + 1)。一个ConstBufferSequence是N个const_buffers的序列
    猜你喜欢
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    相关资源
    最近更新 更多