Вы не предложили достаточно кода для правильной отладки, но я предполагаю, что вы имеете в виду
String id = "6415F1BF713C";
Serial.printf("id: %s\n\n", id);
Serial.print(id);
Формат %s
в методе printf()
предполагает получение C / C ++ char *
, а не String
. Когда вы передали ему String
, он напечатал адрес памяти объекта String
- четыре символа, которые, как вы видели, будут выглядеть как мусор.
C и C ++ используют char *
(указатели на символы) и char []
(массивы символов) для представления строк. Они отличаются от класса Arduino String
, и люди часто путают их.
Чтобы использовать метод printf()
с String
, вам необходимо получить указатель на строку C, например:
Serial.printf("id: %s\n\n", id.c_str());
Причина, по которой это:
Serial.print(id);
работает, заключается в том, что метод print()
имеет форму, которая специально ожидает принять объект String
в качестве аргумента.