现在在我当前的项目中,我有一个这样的字符串:
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]可以改变的东西。
答案 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