如何将字符串向量转换为uint8_t向量

时间:2019-06-12 10:59:26

标签: c++ vector std stdvector uint8t

短版:

我有一个字符串:0x4D;0x90;0x69

我想要一个数组

static const uint8_t array[] = {
    0x4D, 0x90, 0x69
} 

怎么办?

长版:

我有一个字符串(buffer),其格式如下:0x4D​0x90​0x69在十六进制的“数字”之间是零宽度空间,我使用

将它们分成字符串向量
std::vector<std::string> v{ explode(buffer, '\u200B') };

我想要一个包含uint8_t数据的Vector。

我已经尝试过重新解释该字符串,并且确实有效。但是我将其放在forloop中,它将结果推入uint8_t向量中,但是向量中仅包含0x00

std::vector < std::string > v {
  explode(buffer, '\u200B')
};
std::vector < uint8_t * > ob;
for (auto n: v) {
  uint8_t * p = reinterpret_cast < uint8_t * > ( & n);
  //std::cout << n << " | " << p << std::endl;
  ob.push_back(p);
};

for (auto na : ob) std::cout << na << std::endl;

我在控制台中只得到三个0x00。

我想将包含static const uint8_t arr[]的{​​{1}}拆分出来。

编辑: 我忘了在这里添加buffer函数,它基本上只是一个拆分。 ```cpp

explode

1 个答案:

答案 0 :(得分:0)

for (auto n : v)

这将获取v中每件物品的副本,这些副本在循环体内一直存在。

uint8_t * p = reinterpret_cast < uint8_t * > ( & n);

这为您提供了在重新解释后指向本地复制内容的指针。

ob.push_back(p);

这会将指针存储到向量中。

}

这使所有那些指针都悬空了。

要修复此UB,您可以尝试使用for (const auto& n : v)

但是,还有其他问题。这些“事物”中的每一个都是std::string!将std::string*强制转换为uint8_t*并没有真正弄清楚您要实现的目标是没有意义的。您是否打算将n.c_str()的结果强制转换为uint8_t*?但这也没有实现任何目的。

我认为您需要研究a better way to interpret a sequence of characters as a number and convert it to an integer