我有一个混合二进制(即图像)和一些存储在" std::vector<char>
"容器中的人类可读数据(即HTTP标头).(数据以"CRLFCRLF(\ r \n\r \n)"指示符分隔)
任何人都可以建议如何在" "容器中找到" \ r \n\r \n " 的起始位置?std::vector<char>
是否可以使用STL库执行" std::size_t pos = data.find("\r\n\r\n");
(数据为" std::vector<char>
")"的操作?
谢谢.
您不需要将要查找的模式放入容器中.AC串就足够了.
std::vector<char> v = ....;
const char *crlf2 = "\r\n\r\n";
auto it = std::search(v.begin(), v.end(), crlf2, crlf2 + strlen(crlf2));
Run Code Online (Sandbox Code Playgroud)
无论如何,在此之后,it
将包含一个迭代器到该v
模式开始的向量中(或者v.end()
如果找不到模式).
您可以使用std::distance(v.begin(), it)
或仅将其转换为索引it - v.begin()
您可以使用std::search
搜索感兴趣的字符序列的第一个匹配项.您必须将该序列放在数组或容器中.
std::vector<char> v = ....;
std::vector<char> start{'\r', '\n', '\r', '\n'};
auto it = std::search(v.begin(), v.end(), start.begin(), start.end());
Run Code Online (Sandbox Code Playgroud)