我有一 block 板可以将文本行输出到串行。我需要将这些文本行与我所知道的进行比较。本质上,我想执行 strcmp(thestring,F("knownstring"))
,但是似乎没有采用 FlashStringHelper* 类型的 strcmp 版本。有一个使用 const PROGMEM char *
的 strcmp_P,但这看起来完全是另一回事。我在 Arduino 论坛帖子上看到有人建议通过使用 progmem_read_byte (b, i)
遍历 flash-string 来编写一个,但该函数实际上并不存在并且最接近的等效项(pgm_read_byte (b+i)
) 似乎不适用于 FlashStringHelper* - 我收到类似 error: invalid use of incomplete type 'class __FlashStringHelper'
和 error: forward declaration 这样的错误'class __FlashStringHelper'
,这意味着我做了一些严重错误的事情!我几乎要放弃并将字符串放入 RAM 中,但是 arduino 没有太多这样的东西,所以我想尽可能避免这种情况。谁能帮忙?
最佳答案
__FlashStringHelper
只是用于确定 Flash 字符串的正确重载函数/方法的特殊数据类型。
无论如何你不能使用strcmp
因为它用于比较 RAM 中的两个字符串,但在包含 <avr/pgmspace.h>
中有它的变体 strcmp_P
用于比较 const char *
用 const char *
放在 RAM 中放置在FLASH存储器中(按此顺序)。
所以你可以使用:
strcmp_P(thestring, (const char*)F("knownstring"));
// or better:
strcmp_P(thestring, PSTR("knownstring"));
F
宏基本上是:(__FlashStringHelper *)PSTR("...")
所以将它转换回 const char*
有点多余在第一种情况下。
关于c++ - 我如何比较 __FlashStringHelper* 和 Arduino 上的 char*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40334026/