std :: string到char数组,char数组到string(c ++)

时间:2015-04-21 14:08:30

标签: c++ arrays string

现在在我当前的项目中,我有一个这样的字符串:

std::string ordre="0x010x030x000x320x000x01";

我想用它创建一个看起来像这样的字符数组(如果可能的话也是反向操作):

unsigned char Com[]= {0x01, 0x03, 0x00, 0x32, 0x00, 0x01};

我使用字符串没有问题,创建另一个std :: string并在开头使用ordre.at()获取我想要的字符的0x01部分。但我找不到将这个新字符串0x01放入Com [1]的方法。

直接写作:

Com[1]=0x01;

它有效,但我想做一些Com [1]可以改变的东西。

2 个答案:

答案 0 :(得分:2)

  

现在在我当前的项目中,我有一个这样的字符串:

std::string ordre="0x010x030x000x320x000x01";
  

我想用它创建一个看起来像这样的字符数组(如果可能的话也是反向操作):

unsigned char Com[]= {0x01, 0x03, 0x00, 0x32, 0x00, 0x01};

首先,“0x01”与0x01不同。要从字符串中提取值,您需要在循环中读取它,一次读取四个字符:

if(ordre.size() % 4)
    throw std::runtime_error{ "invalid string length; format is different" };
std::vector<int> values;

auto b = std::begin(ordre);
const auto e = std::end(ordre);
while(b != e)
{
    std::string s{ b, b+4 };
    values.push_back(std::stoi(s, 0, 16));
    b += 4;
}

答案 1 :(得分:0)

如果使用C ++:使用STL结构而不是(使用)数组

如果我在哪里构建std::vector<unsigned char>并通过迭代循环中的x动态填充它。

我会这样做矢量填充:

注意:此代码适用于任何大小的输入,并不限于4个字符串子串。因此,它比其他答案代码更通用但效率更低。根据您的需求选择

std::string order = "0x010x020x030x2360x10240x9001";
std::vector<int> coms;

size_t pos = 0, it;
while ((it = order.find("0x", pos + 1)) != std::string::npos)
{
    coms.push_back(std::stoi(order.substr(pos, it-pos), 0, 16));
    pos = it;
}
coms.push_back(std::stoi(order.substr(pos), 0, 16));

给出:

0x01 = 1
0x02 = 2
0x03 = 3
0x236 = 556
0x1024 = 4132
0x9001 = 36865