gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:42:00 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com