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);
                    ^

Я не понимаю, что не так?

, 👍1


1 ответ


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

1

Попробовать

Wire.write((const uint8_t*) message, 4);

Т.е. приведите его к правильному типу, uint8_t и char совпадают (по крайней мере на Arduino и для этого примера, так как вы не char про беззнаковые/подписанные значения).

(см. также комментарий Busybee ниже, для использования более чистого приведения C++).

,

Но если они одинаковые, почему он жалуется?, @user88434

@user88434 user88434 Потому что C ++ - это язык с более строгой системой типов, и предупреждение включено во время компиляции. Вы, как программист, должны четко указать, что вы меняете _интерпретацию_ байтов. -- Кстати, чистое решение не будет использовать приведение C, а приведение C++, например Wire.write(reinterpret_cast<uint8_t*>(message), 4);., @the busybee