gpt4 book ai didi

c++ - 帮助 async_read_until

转载 作者:行者123 更新时间:2023-11-28 03:58:46 24 4
gpt4 key购买 nike

我在此处记录的函数中实现第三个参数时遇到问题: http://www.boost.org/doc/libs/1_39_0/doc/html/boost_asio/reference/async_read_until/overload4.html我想要做的是使用 async_read_until 的第三个参数的回调来检测完整 block 何时到达。我的数据包具有以下格式。

  • 1字节id(数据的语义)
  • unsigned int(数据中的字节数,因为一些数据 block 可以改变大小)
  • 有效载荷

查看文档中的示例代码,我对应该如何提取字节感到有点困惑,更不用说从开始和结束迭代器中提取 unsigned int 了。我已经将我的迭代器实例化为 typedef boost::asio::buffers_iterator<
boost::asio::streambuf::const_buffers_type> iterator;

但即便如此我也不确定那是什么类型,因为我不知道 const_buffers_type 是什么。我点击了文档中的一些链接,发现它是“实现定义的”,但我想我可能是错的。所以我的两个具体问题是:

  1. 我如何使用这两个迭代器来读取 unsigned int?
  2. 这些迭代器指向什么类型?

谢谢!

最佳答案

文档中提供了示例匹配函数。

std::pair<iterator, bool>
match_whitespace(iterator begin, iterator end)
{
iterator i = begin;
while (i != end)
if (std::isspace(*i++))
return std::make_pair(i, true);
return std::make_pair(i, false);
}

在这里取消引用i,取出一个字节。您需要提取足够的字节来匹配一个 int。

但是请记住,回调并不是 read_until 的唯一选项。实际上它是最复杂的。您确定仅使用正则表达式还不够吗?

template<
typename AsyncReadStream,
typename Allocator,
typename ReadHandler>
void async_read_until(
AsyncReadStream & s,
boost::asio::basic_streambuf< Allocator > & b,
const boost::regex & expr,
ReadHandler handler);

无论如何,考虑到您的读取没有定界,更好的方法是 async_read_some 直到您读取大小,然后 async_read_some 至少读取。

关于c++ - 帮助 async_read_until,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1993356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com