Сохранение package.data() в строку с помощью ASyncUDP на ESP32

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

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

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


person Bryan Costanza    schedule 05.10.2019    source источник


Ответы (1)


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

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*).

person Flo    schedule 06.10.2019
comment
Проблема немного изменилась, поэтому я не пробовал именно это решение, но использовал его часть. Благодарю вас! - person Bryan Costanza; 13.10.2019