C++ 将uint8_t数组转换为c+中的字符串+;

C++ 将uint8_t数组转换为c+中的字符串+;,c++,type-conversion,esp32,C++,Type Conversion,Esp32,这是可以解决的。问题在于打印宏。ESPyLogX不能输出C++字符串。 我试图将uN88t数组转换成C++中的字符串。 数组在头文件中定义如下: uint8_t mypayload[1112]; 打印阵列本身可以工作,所以我确信它不是空的 现在我尝试将其转换为字符串: string qrData; std::string qrData(reinterpret_cast<char const*>(mypayload), sizeof mypayload); 字符串数据; std:

这是可以解决的。问题在于打印宏。ESPyLogX不能输出C++字符串。 我试图将uN88t数组转换成C++中的字符串。 数组在头文件中定义如下:

uint8_t mypayload[1112];
打印阵列本身可以工作,所以我确信它不是空的

现在我尝试将其转换为字符串:

string qrData; 
std::string qrData(reinterpret_cast<char const*>(mypayload), sizeof mypayload);
字符串数据;
std::字符串qrData(reinterpret_cast(mypayload),mypayload的大小);
我还尝试:
qrData=(char*)mypayload

打印字符串将导致5个随机字符


有人知道我哪里出错了吗?

既然您知道另一个变量中数据的大小,为什么要使用
sizeof
?它将给出数组的大小,而不是数据的大小

假设代码中没有其他错误,这将为您提供正确的结果

std::string qrData(reinterpret_cast<char const*>(mypayload), data->payload_len);
std::stringqrdata(重新解释强制转换(mypayload),data->payload\u len);

顺便问一下,在您引用的代码中,为什么
qrData
声明了两次?这似乎有点可疑。

到目前为止,唯一正确的评论来自某个程序员。所以所有的功劳都归他了

Ian4264的评论完全错误。当然,你可以重新解释演员阵容

请阅读
std::string
的构造函数。您正在使用构造函数4。说明如下:

4) 使用s指向的字符串的第一个计数字符构造字符串。s可以包含空字符。字符串的长度为count。如果[s,s+计数)不是有效范围,则行为未定义

因此,即使该字符串包含0个字符,C样式的字符串“terminator”也将复制uint8_t数组的所有字节。如果打印该字符串,则它将打印所有字符,甚至“\0”后面的不可打印字符

这可能是您的“随机”字符。因为“终止符”后面的字符串很可能包含未初始化的值

你应该考虑使用构造函数编号5 < /P> 5) 使用由s指向的以空结尾的字符串的副本初始化的内容构造字符串。字符串的长度由第一个空字符确定。如果[s,s+Traits::length(s)]不是有效范围,则行为未定义

如果需要添加字节,也可以添加。
std::string
可以动态增长


顺便说一句:您确实定义了“std::string qrData”双精度,它不会编译

请记住,
char
字符串实际上被称为以null结尾的字节字符串。如果您有一个要用作字符串的字节数组,则需要确保它以“null”字符结尾(
'\0'
或纯零)。感谢您的回复!我已经通过
char terminator='\0';memcpy(&mypayload[data->payload\u len],&terminator,1)在创建数组时添加了一个终止符;
您不能将数组强制转换为字符串。您需要执行一些逻辑来迭代数组,将每个数字附加到字符串上,每个数字之间带有某种分隔符。我建议使用ostringstream。请参阅示例Sizeof?为什么?您可能需要重新考虑这一点。从您给出的不完整代码来看,似乎不可能找出代码的确切问题。错误可能是按代码的顺序排列的。请尝试通过调试器运行代码。您应该确定代码中有问题的部分,并查看是否可以通过在Internet上搜索来解决错误。如果不可以,请提取有问题的代码并进行修改(可直接输入编译器并演示问题)为了演示它。请确保解决一个特定问题,并发布重现该问题所需的最低代码。感谢您的回复!公平地说,我对这个问题相当陌生,并且理解了您链接的大约20%的源代码。我手边有
mypayload
的长度作为
mypayload\u len
,它是通过
mypayload\u len构建的=data->payload_len+1
并试图传递它,不幸的是,这导致了相同的结果。所以我认为这不是问题。好吧…我的原始代码工作了..ESP print宏似乎有问题。该死的小时数。。。