У меня есть массив символов и packet
это указатель на этот массив. Я хочу скопировать среднюю часть этого массива в вектор строк:
void TCP::new_packet(flow_info key, const u_char* packet, time_t timer){
std::vector(std::string);
//I want to add bytes 3 to 7 of the packet to the vector!
}
Кто я могу это сделать?
Я хочу скопировать среднюю часть этого массива в вектор строк:
Если цель состоит в том, чтобы скопировать часть массива char в std::string
, использовать std :: string constructor (4) это берет указатель на символ и размер:
void TCP::new_packet(flow_info key, const u_char* packet, time_t timer)
{
std::vector<std::string> v;
// I want to add bytes 3 to 7 of the packet to the vector
v.push_back(std::string(packet+3, 5));
}
Редактировать:
Так как вы используете u_char
Вы можете создать простую функцию для выполнения работы:
#include <iostream>
#include <string>
#include <vector>
#include <cstdint>
using namespace std;
void addToVector(const u_char* data, std::vector<std::string>& v,
int start, int end)
{
v.push_back(std::string(reinterpret_cast<const char *>(data) + start,
end - start + 1));
}
int main()
{
const u_char p[] = "abc123456";
std::vector<std::string> v;
addToVector(p, v, 3, 7);
std::cout << v[0];
}
Вот
std::string str = "This is a test!";
strings.push_back(str.substr(3, 4));
И что это ??
u_char *middle;
middle = &str;
Вы можете основать то, что вы хотите сделать с помощью следующего фрагмента кода, используяstd::copy_n
http://en.cppreference.com/w/cpp/algorithm/copy_n
http://en.cppreference.com/w/cpp/iterator/advance
const std::string str { "123456789" };
std::vector<char> sub;
auto iter = std::begin(str);
// use advance to make this clear when you read.
std::advance(iter, 3);
// from where the advance left the iterator, and go fw 4 positions.
std::copy_n(iter, 4, std::back_inserter(sub));
for (auto c: sub) {
std::cout << c << "\n";
}
Я не знаю, зачем вам переменная среднего,
но если вы хотите скопировать фрагмент строки в
«vector (string)», затем сначала вам нужно создать новую строку для хранения фрагмента исходной строки str.code следующим образом:
string temp;
for(int i=3;i<8;i++)
{
temp.push_back(str[i]);
}
strings.push_back(temp);