c ++转换字符串 - unsigned char

时间:2011-01-19 10:05:41

标签: c++

我有一个字符串值: std::string bl="0x"+"a0"; //其中a0是一个heva数。我添加了0x因为我想要我的矢量

std::vector<unsigned char>vect;

vect.push_back(bl.begin(), bl.end()); //错误无效。

需要帮助。该怎么办? 我正在使用ubuntu c ++代码。

4 个答案:

答案 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的向量。