c++ - 我如何比较 __FlashStringHelper* 和 Arduino 上的 char*?

标签 c++ arduino string-comparison

我有一 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/

相关文章:

c - 评估存储在变量中的字符串并分配给数组

c# - 优化C#中的字符串比较

Python - 比较来自txt文件的字符串输入

python - 如何从 Ableton Live 控制表面脚本将 MIDI 数据发送到我的 Arduino 板

c++ - STL:使用 ptr_fun 为 "const T &"类型调用 bind2nd

c++ - C++中的构造函数执行顺序

c++ - 使用 MFC 在对话框中拖动文件

c++ - 公开定义对象,但在构造函数中创建它

string - 比较 Fortran 中的两个字符串

c++ - 错误:使用已删除的函数 boost::shared_mutex::shared_mutex