我需要使用函数func(uint8_t* buffer, uint size)
;假设我不能改变它的参数,我想给它一个字符串。
我有一个vector<string>
,我必须将其转换为uint8_t*
,然后读取它并将其转换回vector<string>
。我尝试使用以下代码阅读(打印)vector.data()
输出,但它打印的是垃圾:
#include <cstdint>
#include <string>
#include <vector>
#include <iostream>
int main() {
std::string a1 = {"ath"};
std::cout <<"1: "<< a1<<" end\n";
std::vector<std::string> vec;
vec.push_back(a1);
uint8_t *ptr = reinterpret_cast<uint8_t*>(vec.data());
std::cout <<"2: "<< ptr[0]<<" end\n";
}
输出:
1: ath end
2: � end
问题:
1.为什么这不管用
1.我在一些链接中看到,他们使用char*
数组初始化std::string
,如下所示:
char *ptr={'a'};
std::string myStr(ptr);
我想这是因为添加了“\0”,这是否与我的问题有关?
2条答案
按热度按时间44u64gxh1#
为什么这不管用
这是行不通的,因为
std::string
不仅仅是一个连续的内存块,它只包含字符串中的字符。这里使用向量显然不是正确的方法。向量不包含字符串的内容。只有
std::string
对象本身,它们不是字符串数据。相反,您需要创建一个long的
std::string
:如果你确实有一个
std::string
s的std::vector
作为开始,可以在一个简单的循环中完成连接:...缺少\0 ...我想这是因为添加了“\0”,这是否与我的问题有关?
不,那完全无关。
eyh26e7m2#
我有一个向量,必须转换为uint8_t*
“转换”在C++(和其他语言)世界中有一个相对较强的定义。如果我理解你的意思,我建议如下:
或者,如果可能,您可以使用
std::basic_string<uint8_t>
而不是std::string
(a/k/astd::basic_string<char>
),以避免重新解释其内容。