我有一个包含元素0x1c的unsigned char* c
。如何将其添加到std::vector<unsigned char>vect
?我在c ++工作。
std::vector<unsigned char>vect; //the vect dimention is dynamic
std::string at="0x1c";
c=(unsigned char*)(at.c_str());
vect[1]=c //error? why?
答案 0 :(得分:3)
//The vect dimension is dynamic ONLY if you call push_back
std::vector <std::string> vect;
std::string at="0x1c";
vect.push_back(at);
如果您使用的是C ++,请使用std :: string。上面的代码会将“0x1c”字符串复制到向量中。
如果您尝试
vect[0] = c;
首先用
扩展矢量vect.resize(1);
您将获得分段错误,因为operator []不会动态扩展向量。向量的初始大小为0 btw。
更新:根据OP的评论,这是他想要的:将无符号字符*复制到std :: vector(即将C数组复制到C ++向量)
std::string at = "0x1c";
unsigned char * c = (unsigned char*)(at.c_str());
int string_size = at.size();
std::vector <unsigned char> vect;
// Option 1: Resize the vector before hand and then copy
vect.resize(string_size);
std::copy(c, c+string_size, vect.begin());
// Option 2: You can also do assign
vect.assign(c, c+string_size);
答案 1 :(得分:0)
字符串中有一个字符的十六进制表示,你想要字符吗?
最简单的:
unsigned char c;
istringstream str(at);
str >> hex >> c; // force the stream to read in as hex
vect.push_back(c);
(我认为应该有效,没有测试过)
我再次重读你的问题,这一行:
我有一个unsigned char * c 包含元素0x1c
这是否意味着实际上你的unsigned char *看起来像这样:
unsigned char c[] = {0x1c}; // i.e. contains 1 byte at position 0 with the value 0x1c?
或我上面的假设......
将矢量打印到cout
,使用简单的for循环,或者如果你感觉很勇敢
std::cout << std::ios_base::hex;
std::copy(vect.begin(), vect.end(), std::ostream_iterator<unsigned char>(std::cout, " "));
std::cout << std::endl;
这将打印由空格分隔的向量中每个unsigned char
值的十六进制表示。
答案 2 :(得分:0)
c是unsigned char*
。 vect是std::vector<unsigned char>
,因此它包含unsigned char值。分配将失败,因为operator []
上的std::vector<unsigned char>
需要unsigned char
,而不是unsigned char *
。