我有一个字符数组,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!
}
我可以做谁?
答案 0 :(得分:3)
我想将此数组的中间部分复制到字符串向量:
如果目标是将char数组的一部分复制到std::string
,请使用带有指向char和大小的指针的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];
}
答案 1 :(得分:1)
这是
std::string str = "This is a test!";
strings.push_back(str.substr(3, 4));
这是什么??:
u_char *middle;
middle = &str;
答案 2 :(得分:0)
您可以使用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";
}
答案 3 :(得分:-1)
我不知道为什么你需要中间的变量, 但是如果你想将一片字符串复制到一个 “vector(string)”,然后首先需要构造一个新的字符串来保存原始字符串str.code的片段,如下所示:
string temp;
for(int i=3;i<8;i++)
{
temp.push_back(str[i]);
}
strings.push_back(temp);