我想使用printf方法打印我的字符串变量:
id = 6415F1BF713C
Serial.printf("id: %s\n\n", 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: %s\n\n", id);
Serial.print(id);发布于 2020-03-15 22:34:47
您没有提供足够的代码来正确调试它,但我猜您的意思是
String id = "6415F1BF713C";
Serial.printf("id: %s\n\n", id);
Serial.print(id);printf()方法中的%s格式需要采用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对象作为参数。
https://stackoverflow.com/questions/60691951
复制相似问题