Сохранение packet.data () в строку с помощью ASyncUDP на ESP32 - PullRequest
0 голосов
/ 06 октября 2019

Я в основном взял пример AsyncUDP Server и пытаюсь сохранить содержимое packet.data() в строку. Я получил все виды ошибок о invalid conversion. Я боролся с этим часами и не записывал каждый шаг.

Если я использую String testString = packet.data();, я получаю invalid conversion from 'uint8_t* {aka unsigned char*}' to 'const char*' [-fpermissive].

Я не достаточно силен в C, очевидно, чтобы полностью понятьвсе эти типы данных, указатели и т. д. и как избавиться от того, что кажется простой проблемой.

1 Ответ

0 голосов
/ 06 октября 2019

Сохранить версию:

char* tmpStr = (char*) malloc(packet.length() + 1);
memcpy(tmpStr, packet.data(), packet.length());
tmpStr[packet.length()] = '\0'; // 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 *) .

...