字符串和char元素

时间:2011-01-19 15:10:00

标签: c++ string vector

我有一个包含元素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?

3 个答案:

答案 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 *