Недопустимое преобразование из «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]*
Пожалуйста, помогите...
@wieb, 👍1
Обсуждение2 ответа
Лучший ответ:
В пакете 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
Не уверен, почему вы вообще используете 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
- C++ против языка Arduino?
- avrdude ser_open() can't set com-state
- Как читать и записывать EEPROM в ESP8266
- Float печатается только 2 десятичных знака после запятой
- устаревшее преобразование из строковой константы в 'char*'
- Запрограммировать ATMega328P и использовать его без платы Arduino.
- Разница между print() и println()
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
вы изменили не тот... попробуйте изменить
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);**
, @wiebvoid 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