Wire.write недопустимое преобразование из 'char*' в 'const uint8_t*
Я написал этот код:
char message[4];
memcpy(message, &delta, 4);
Wire.write(message, 4);
Когда я пытаюсь скомпилировать, я получаю это предупреждение:
warning: invalid conversion from ‘char*’ to ‘const uint8_t* {aka const unsigned char*}’ [-fpermissive]
Wire.write(message, 4);
^
Также следует это примечание:
In file included from main.ino:5:0:
/usr/share/arduino/libraries/Wire/Wire.h:61:20: note: initializing argument 1 of ‘virtual size_t TwoWire::write(const uint8_t*, size_t)’
virtual size_t write(const uint8_t *, size_t);
^
Я не понимаю, что не так?
@user88434, 👍1
1 ответ
Лучший ответ:
▲ 1
Попробовать
Wire.write((const uint8_t*) message, 4);
Т.е. приведите его к правильному типу, uint8_t и char совпадают (по крайней мере на Arduino и для этого примера, так как вы не char про беззнаковые/подписанные значения).
(см. также комментарий Busybee ниже, для использования более чистого приведения C++).
,
@Michel Keijzers
Смотрите также:
- Отправка и получение различных типов данных через I2C в Arduino
- I2C связь между Arduino Uno и Nodemcu32-s (ESP32)
- Проводная связь Arduino с MCP23008 GPIO pin expander для включения светодиода нажатием кнопки
- Соединение i2c для MCP4725 (Dac) с Esp8266 wemos d1 mini
- Протокол I2C не работает должным образом
- Хранить целочисленное значение денег на RFID-метке
- Преобразование int или float в массив байтов в ардуино
- Преобразование int в unsigned char для отображения на Nokia 5110
Но если они одинаковые, почему он жалуется?, @user88434
@user88434 user88434 Потому что C ++ - это язык с более строгой системой типов, и предупреждение включено во время компиляции. Вы, как программист, должны четко указать, что вы меняете _интерпретацию_ байтов. -- Кстати, чистое решение не будет использовать приведение C, а приведение C++, например
Wire.write(reinterpret_cast<uint8_t*>(message), 4);
., @the busybee