在 ESP32 上使用 ASyncUDP 将 packet.data() 保存到字符串



我基本上以AsyncUDP服务器为例,我正在尝试将packet.data()的内容保存到一个字符串中。我得到了关于invalid conversion的各种错误.我已经为此苦苦挣扎了几个小时,并没有记录每一步。

如果我使用String testString = packet.data();我会得到invalid conversion from 'uint8_t* {aka unsigned char*}' to 'const char*' [-fpermissive].

显然,我在 C 方面不够强大,无法完全理解所有这些数据类型、指针等,以及如何摆脱看似简单的问题。

保存版本:

char* tmpStr = (char*) malloc(packet.length() + 1);
memcpy(tmpStr, packet.data(), packet.length());
tmpStr[packet.length()] = ''; // ensure null termination
String testString = String(tmpStr);
free(tmpStr); // Strign(char*) creates a copy so we can delete our one

如果数据包的数据以空终止,则以下内容应该有效:

String testString = String( (char*) packet.data());

这是可能的,因为unit8_t* 与char* 在本质上相同,但编译器不能自行进行此转换,因此您必须执行显式强制转换。 然后可以使用String(char*(的构造函数。