我想使用printf方法打印字符串变量:
id=6415F1BF713C
Serial.printf("id: %snn", id);
Serial.print(id);
我得到的结果是:
id: ⸮⸮⸮?
6415F1BF713C
有什么不对的地方吗?
谢谢。
更新:
//get device id
String getDeviceID() {
uint64_t chipid = ESP.getEfuseMac(); // The chip ID is essentially its MAC address(length: 6 bytes).
uint16_t chip = (uint16_t)(chipid >> 32);
char devID[40];
snprintf(devID, 40, "%04X%08X", chip, (uint32_t)chipid);
return devID;
}
String id = getDeviceID();
Serial.printf("id: %snn", id);
Serial.print(id);
您没有提供足够的代码来正确调试它,但我猜您的意思是
String id = "6415F1BF713C";
Serial.printf("id: %snn", id);
Serial.print(id);
printf()
方法中的%s
格式需要采用C/C++char *
,而不是String
。当您向它传递String
时,它会打印String
对象的内存地址——正如您所看到的,这四个字符将显示为垃圾。
C和C++使用char *
(指向字符的指针(和char []
(字符数组(来表示字符串。这些与ArduinoString
类不同,人们经常将它们混淆。
要将printf()
方法与String
一起使用,您需要获取其C字符串指针,如下所示:
Serial.printf("id: %snn", id.c_str());
原因是:
Serial.print(id);
工作原理是print()
方法具有一个专门期望将String
对象作为参数的形式。