我有一个字符串值:
std::string bl="0x"+"a0";
//其中a0是一个heva数。我添加了0x因为我想要我的矢量
std::vector<unsigned char>vect;
vect.push_back(bl.begin(), bl.end());
//错误无效。
需要帮助。该怎么办? 我正在使用ubuntu c ++代码。
答案 0 :(得分:2)
由于字符串bl
的内容,我不能100%确定你想要的内容。
直截了当地说:
std::string bl = "0xA0";
// ^ this is what you meant to write ("0x"+"A0" is actually adding pointers)
std::vector<unsigned char> vect;
vect.insert(vect.begin(), bl.begin(), bl.end());
// ^ you use ranges with .insert not push_back
或者您可以使用构造函数:
std::string bl = "0xA0";
std::vector<unsigned char> vect(bl.begin(), bl.end());
// ^ you use ranges with the constructor too
在这两种情况下,矢量都包含字符'0','x','A'和'0'。
或者,您可能认为字符串包含ASCII值为(十六进制)0xA0
的单个字符。如果是这样,"0x"+"a0"
是非常错误的。
std::string bl = "\xA0";
std::vector<unsigned char> vect(bl.begin(), bl.end());
向量包含一个字符,其ASCII值为0xA0
。
我希望这会有所帮助。
答案 1 :(得分:1)
不要使用push_back(...),它通常不能推送一个间隔,它会推送一个项目。您可以使用assign(开始,结束)或insert(iter_position,vect_begin,vect_end)。
例如:
vect.assign(bl.begin(), bl.end());
vect.insert(vect.begin(), bl.begin(), bl.end());
vect.push_back(bl[0]); // '0'
vect.push_back(bl[1]); // 'x'
vect.push_back(bl[2]); // 'a'
vect.push_back(bl[3]); // '0'
答案 2 :(得分:0)
给矢量类型。
std :: vector vec;
到
的std ::矢量&lt;串GT; vec或任何你需要的东西。和向量push_back签名是void push_back(const T&amp;)。它没有两个论点。
答案 3 :(得分:-1)
原因很简单,您试图在容器中插入无效元素。
std :: string没有隐式转换将其数据更改为unsigned char的向量。