Недопустимое преобразование из «const char» в «uint8_t*»

Я новичок, не знаю, как решить эту проблему

void loop()
{
  UdpSend("Test", "192.168.0.240", 4210);
}

void UdpSend(const char* message, uint8_t * ipaddress, int port){
      Serial.println("Send message: ");
      Udp.beginPacket(ipaddress, port);
      Udp.write(message);
      Udp.endPacket();
}

Arduino IDE не может скомпилироваться.

Сообщение об ошибке: недопустимое преобразование из 'const char' в 'uint8_t* {aka unsigned char*}' [-fpermissive]*

Пытаюсь изменить с помощью этого кода:

void UdpSend(uint8_t * message, uint8_t * ipaddress, int port){
      Serial.println("Send message: ");
      Udp.beginPacket(ipaddress, port);
      Udp.write(message);
      Udp.endPacket();
}

Также не работает, появляется сообщение об ошибке: недопустимое преобразование из 'const char' в 'uint8_t* {aka unsigned char*}' [-fpermissive]*

Пожалуйста, помогите...

, 👍1

Обсуждение

вы изменили не тот... попробуйте изменить uint8_t * ipaddress на const char * ipaddress... затем в Udp.beginPacket((uint8_t *) ipaddress, ..., @Jaromanda X

Измените код следующим образом: void UdpSend (const char * message, const char * ipaddress, int port) { Serial.println("Отправить сообщение: "); Udp.beginPacket((uint8_t *)ipaddress, порт); Udp.write(сообщение); Udp.endPacket(); } Ошибка: _invalid преобразование из 'const char*' в 'uint8_t {он же беззнаковый символ}'_ в **Udp.write(message);**, @wieb

void UdpSend (const char * message, const char * ipaddress, int port) { Serial.println("Отправить сообщение: "); Udp.beginPacket((uint8_t *)ipaddress, порт); Udp.write((uint8_t *)сообщение); Udp.endPacket(); } Ошибка: _invalid преобразование из 'uint8_t* {он же беззнаковый символ*}' в 'uint8_t {он же беззнаковый символ}'_ в Udp.write((uint8_t *)message);, @wieb

Пожалуйста помоги...., @wieb

хм... ок, я наверное не внимательно посмотрел код, @Jaromanda X

из какой библиотеки взят Udp? - на самом деле вам не нужен (uint8_t *) **вообще**, @Jaromanda X

#include <WiFiUdp.h>, @wieb

Удалить все (uint8_t *): void UdpSend(const char * message, const char * ipaddress, int port){ Serial.println("Отправить сообщение: "); Udp.beginPacket(ipaddress, порт); Udp.write(сообщение); Udp.endPacket(); } Ошибка: _недопустимое преобразование из 'const char*' в 'uint8_t {он же беззнаковый символ}'_ в Udp.write(message);, @wieb


2 ответа


Лучший ответ:

3

В пакете ESP32 Arduino WiFiUdp.h не поддерживает все функции write класса печати. Как следствие, класс WiFiUdp не знает write(const char *str).

Используйте Udp.print(message);, если сообщение представляет собой массив символов с нулевым завершением

или Udp.write(message, size);, если сообщение представляет собой массив байтов

,

Я предполагаю, что это esp32. Респект тебе, если ты прав!!!, @Jaromanda X

Думаю, Юрай прав, я использую ESP32., @wieb

Большое спасибо, Юрай, ваше решение работает отлично., @wieb

@JaromandaX, это было не так уж и дико. WiFiUdp.h не так много (ОП показал это в комментарии), @Juraj

Я все еще впечатлен, @Jaromanda X


2

Не уверен, почему вы вообще используете uint8_t

Сигнатура функции Udp.beginPacket

int WiFiUDP::beginPacket(const char *host, uint16_t port)

Нет намека на uint8_t

и .write тоже

WiFiUDP::write(uint8_t byte)
WiFiUDP::write(const uint8_t *buffer, size_t size)
WiFiUDP::write(const char *str)
WiFiUDP::write(const char *buffer, size_t size)

Итак, ваша другая попытка использовать write((uint8_t *)) тоже неверна

Попробуйте следующее:

void loop()
{
  UdpSend("Test", "192.168.0.240", 4210);
}

void UdpSend(const char* message, const char * ipaddress, int port){
      Serial.println("Send message: ");
      Udp.beginPacket(ipaddress, port);
      Udp.write(message);
      Udp.endPacket();
}
,

Извините, я всего лишь новичок, еще не умею и учусь делать это правильно. void UdpSend (const char* message, const char * ipaddress, int port){ Serial.println("Отправить сообщение: "); Udp.beginPacket(ipaddress, порт); Udp.write(сообщение); Udp.endPacket(); } Ошибка: _недопустимое преобразование из 'const char*' в 'uint8_t {он же беззнаковый символ}'_ в Udp.write(message);, @wieb

**какая строка** относится к ошибке - опубликованный мной код **работает**, @Jaromanda X

Ошибка, относящаяся к строке Udp.write(message);. Ошибка: _недопустимое преобразование из 'const char*' в 'uint8_t {он же беззнаковый символ}' [-fpermissive]_, @wieb

вы делаете что-то не так, поскольку Udp.write может принимать один аргумент const char *, @Jaromanda X

Изменение в функции цикла: UdpSend("T", "192.168.0.240", 4210); Также ошибка в Udp.write(message); Сообщение об ошибке: _invalid преобразование из 'const char*' в o ' uint8_t { он же беззнаковый символ}' [-fpermissive]_, @wieb

Раньше я использовал этот код: Serial.println("Отправить: "); Udp.beginPacket("192.168.0.240", 4210); Udp.write("ТЕСТИРОВАНИЕ ИЗ 240"); Udp.endPacket(); И это работает отлично. Но для простоты я пытаюсь написать для него простую функцию void UdpSend(const char* message, const char * ipaddress, int port) (которая не работает), @wieb

@wieb Предоставленный «попробующий» код работает на Arduino IDE 1.8.8 (если вы скомпилируете его для Arduino Uno + WiFi Shield). ВЫ ДОЛЖНЫ предоставить более подробную информацию. Версии всего (IDE, библиотеки WiFi), информация о настройке (плата, шилд, если используется)..., @KIIV