我有一个字符串:0x4D;0x90;0x69
我想要一个数组
static const uint8_t array[] = {
0x4D, 0x90, 0x69
}
怎么办?
我有一个字符串(buffer
),其格式如下:0x4D0x900x69
在十六进制的“数字”之间是零宽度空间,我使用
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
答案 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。