如何在 Arduino 上比较 __FlashStringHelper* 和 char*?

2024-02-14

我有一个将文本行输出到串行的板。我需要将这些文本行与我所知道的文本进行比较。本质上,我想做strcmp(thestring,F("knownstring")),但是似乎没有一个采用 FlashStringHelper* 类型的 strcmp 版本。有 strcmp_P 使用const PROGMEM char *,但这似乎完全是另一回事。我在 Arduino 论坛帖子上看到有人建议通过使用 flash-string 来编写一个progmem_read_byte (b, i),但该函数实际上并不存在,并且最接近的等效函数(pgm_read_byte(b+i))似乎不适用于 FlashStringHelper* - 我收到类似错误error: invalid use of incomplete type 'class __FlashStringHelper' and error: forward declaration of 'class __FlashStringHelper',这意味着我已经做了某事严重地错误的!我几乎要放弃并将字符串放入 RAM 中,但 arduino 没有太多,所以我想如果可能的话避免这种情况。有人可以帮忙吗?


The __FlashStringHelper只是用于确定 Flash 字符串的正确重载函数/方法的特殊数据类型。

反正你不能用strcmp因为它用于比较 RAM 中的两个字符串,但在包含中<avr/pgmspace.h>有它的变体strcmp_P用于比较const char *放置在 RAM 中const char *放置在闪存中(按此顺序)。

所以你可以使用:

strcmp_P(thestring, (const char*)F("knownstring"));
// or better:
strcmp_P(thestring, PSTR("knownstring"));

The F宏基本上是:(__FlashStringHelper *)PSTR("...")所以将其投射回有点多余const char*在第一种情况下。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Arduino 上比较 __FlashStringHelper* 和 char*? 的相关文章

  • 如何获取正在访问 ASP.NET 应用程序的当前用户?

    为了获取系统中当前登录的用户 我使用以下代码 string opl System Security Principal WindowsIdentity GetCurrent Name ToString 我正在开发一个 ASP NET 应用程
  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • 按成员序列化

    我已经实现了template
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 如何生成两个数字之间的随机值[重复]

    这个问题在这里已经有答案了 可能的重复 Java 生成一定范围内的随机数 https stackoverflow com questions 363681 java generating random number in a range 如
  • 有没有一种方法可以在没有基于登录的身份验证的情况下保护 API 的安全?

    我目前正在为一个网站开发一个 API 但该网站不需要登录即可使用 因此该 API 必须在没有个人用户身份验证的情况下工作 目标是防止 API 被第三方使用 有没有办法保护API仅由我的网站使用 而不使用登录身份验证来防止第三方调用后端服务
  • 如何在 Android 上以编程方式安装 CA 证书而无需用户交互

    我正在尝试安装证书而不提示用户 我知道这不是一个好的做法 但这就是总理想要的 Using KeyChain createInstallIntent http developer android com reference android s
  • 发现多个文件具有与操作系统无关的路径“org/apache/http/client/version.properties”

    在将 Android studio 从 2 3 更新到 3 0 之前 一切正常 我在Android Studio中运行应用程序时遇到此错误 编译通过 我不明白为什么会出现这个错误 我在互联网上什么也没找到 这是我的 gradle 文件 pa
  • Spark DataFrame 中的 queryExecution 有什么用?

    我必须了解数据帧对象上名为 queryExecution 的变量 并在 console 中找到以下输出 但不确定它有什么帮助 请在控制台中找到输出 scala gt df queryExecution res5 org apache spa
  • 正则表达式在vim中插入空格

    我是一个正则表达式超级菜鸟 刚刚阅读了我的第一篇关于它们的文章 同时致力于更好地使用 vim 我想使用正则表达式来搜索冒号的所有实例 后面没有空格并且insert一个空间between这些冒号及其后面的任何字符 如果我从以下开始 foo b
  • 如何在vue loader组件中导入JS脚本?

    我有一个 vue 组件 vue 组件 vue loader
  • 将带有辅助 y 轴的 pandas 条形图图例放在条形前面

    我有一个带有辅助 y 轴的 pandas DataFrame 我需要一个条形图 条形图前面有图例 目前 图例前面有一组酒吧 如果可以的话 我还想把图例放在左下角 任何想法表示赞赏 我尝试设置 legend false 并添加自定义图例 但它
  • AVD 模拟器被杀 - Mac

    我花了一整天的时间尝试了在 stackoverflow 上的多个问题和数十个谷歌结果中找到的所有方法 简短摘要 重新启动电脑 删除并重新创建 AVD 将 AVD 图形更改为软件 在 AVD 管理器中和直接在文件中 在 SDK 管理器中重新安
  • 具有动态数据类型的 C 模块化数据结构

    对于我即将进行的大学 C 项目 我被要求拥有 C 允许的模块化代码 基本上 我将拥有一些数据结构的 c 文件和相应的 h 文件 例如链表 二叉树 哈希表等 以链表为例 我有这样的 typedef struct sLinkedList int
  • 如何获取点击的listviewitem的上一项

    我有两项活动 在 Activity1 中 我有从数据库填充的列表视图 单击项目后 它应该转到 Activity2 Activity2 包含两个按钮 下一个和上一个 并显示产品详细信息 我试图获取单击的列表视图项目的上一个项目并在按钮中设置文
  • matplotlib 情节之外的两个图例

    我面临着在情节之外显示两个图例的问题 显示多个图例inside绘图很简单 matplotlib 文档中通过示例对其进行了描述 即使在情节之外显示一个图例也相当容易 正如我在 stackoverflow 上发现的那样 例如here https
  • 是否有 T4 模板可用于从 xsd 生成 c# 类?

    是否有 T4 模板可用于从 xsd 生成 c 类 据我所知 但看看 LINQ to XSD http linqtoxsd codeplex com http linqtoxsd codeplex com 您可以使用 LinqToXsd ex
  • MacOS 10.8 的 rxtxSerial.dll

    我目前正在开发一个 ZigBee 项目 并在装有 Mountain Lion 10 8 的 Mac 上并使用 Eclipse IDE 进行编程 要通过 USB 使用我的 Zigbee 模块进行串行通信 我需要这个 rxtxSerial dl
  • PropTypes React Native 不是一个对象

    我的代码在本地反应时遇到 PropTypes 问题 import React Component PropTypes from react import Text from react native export default class
  • 如何使用控制台删除 GitLab 中的文件夹

    我错误地创建了一个名为src在我的 GitLab 存储库中 现在我想删除此文件夹 我尝试了多种方法来删除它 但我只能在本地删除它 而不能在我的 GitLab 存储库中删除它 该文件夹仍然存在 我想删除它 我已经尝试过这些命令 git rm
  • Python:Beautifulsoup 返回 None 或 [ ]

    你好 我正在练习我的请求和网络抓取技巧 所以我尝试抓取 youtube 上的趋势页面 并提取趋势视频的标题 这是这个链接youtube https www youtube com feed trending 这是我正在运行的代码 impor
  • 为什么ie7总是处于Quirks模式?

    这是我正在使用的 DOCTYPE 和 XML 声明 但 IE7 仍然总是进入怪异模式 有人知道为什么吗 提前致谢 如果 DOCTYPE 之前有任何内容除了 XML 序言之外 那么你就会在IE7中触发怪异模式 这包括空白和注释 XML pro
  • Python 根据条件关闭任务

    我使用 AsyncIO 和 Websockets 模块在 Python 中创建两个并发任务 每个任务都连接到 Websocket 服务器并接收消息 我正在尝试创建一个系统 当任务超过 4 秒没有收到消息时 它必须关闭连接和任务 但我很难弄清
  • 如何在 Arduino 上比较 __FlashStringHelper* 和 char*?

    我有一个将文本行输出到串行的板 我需要将这些文本行与我所知道的文本进行比较 本质上 我想做strcmp thestring F knownstring 但是似乎没有一个采用 FlashStringHelper 类型的 strcmp 版本 有