我想使用 printf 方法打印我的字符串变量:
\n\n编号 = 6415F1BF713C
\n\n Serial.printf("id: %s\\n\\n", id);\n Serial.print(id);\nRun Code Online (Sandbox Code Playgroud)\n\n我得到的结果是:
\n\nid: \xe2\xb8\xae\xe2\xb8\xae\xe2\xb8\xae?\n6415F1BF713C\nRun Code Online (Sandbox Code Playgroud)\n\n有什么问题吗?
\n\n谢谢。
\n\n更新 :
\n\n//get device id\nString getDeviceID() {\n uint64_t chipid = ESP.getEfuseMac(); // The chip ID is essentially its MAC address(length: 6 bytes).\n uint16_t chip = (uint16_t)(chipid >> 32);\n\n char devID[40];\n snprintf(devID, 40, "%04X%08X", chip, (uint32_t)chipid);\n\n return devID;\n}\nString id = getDeviceID();\n\nSerial.printf("id: %s\\n\\n", id);\nSerial.print(id);\nRun Code Online (Sandbox Code Playgroud)\n
您没有提供足够的代码来正确调试它,但我猜您的意思是
String id = "6415F1BF713C";
Serial.printf("id: %s\n\n", id);
Serial.print(id);
Run Code Online (Sandbox Code Playgroud)
该方法%s中的格式printf()期望采用 C/C++ char *,而不是String. 当您向它传递 a 时String,它会打印该对象的内存地址String- 正如您所看到的,这四个字符将显示为垃圾。
C 和 C++ 使用char *(字符指针)和char [](字符数组)来表示字符串。它们与 ArduinoString类不同,人们经常将它们混淆。
要使用printf()带有 a 的方法,String您需要获取其 C 字符串指针,如下所示:
Serial.printf("id: %s\n\n", id.c_str());
Run Code Online (Sandbox Code Playgroud)
原因是这样的:
Serial.print(id);
Run Code Online (Sandbox Code Playgroud)
有效的地方在于该print()方法具有一种明确期望将String对象作为参数的形式。
| 归档时间: |
|
| 查看次数: |
13118 次 |
| 最近记录: |