我有一个Boost缓冲区,我将在此缓冲区中搜索某些内容,例如以下代码:

auto buffer = boost::asio::buffer(my_array, my_array_size);
if (buffer.find("Hello"))
  cout << "Found";
else
  cout << "Not Found";

我知道find函数不存在。

最佳答案

您可以访问内容并使用std::search知道是否存在这样的序列。

std::size_t size = boost::asio::buffer_size(buffer);
unsigned char* data = boost::asio::buffer_cast<unsigned char*>(buffer);
unsigned char pattern[] = {'H', 'E', 'L', 'L', 'O'};

auto it = std::search(data, data + size, std::begin(pattern), std::end(pattern));

if (it != data + size){
    cout << "found";
} else {
    cout << "not found";
}

请注意,由于我们正在处理原始内存字节,因此在缓冲区内搜索字符串时应注意编码。

08-24 21:54
查看更多