首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将uint8_t数组与C中的字符串进行比较?

如何将uint8_t数组与C中的字符串进行比较?
EN

Stack Overflow用户
提问于 2019-05-03 09:56:13
回答 2查看 3.8K关注 0票数 2

我有一个输入来自UART。

代码语言:javascript
运行
复制
uint8_t uartRX_data[UART_RX_BUF_SIZE]="";

我需要把这些数据传递给一个函数。在这个函数中,我希望将它与预定义的字符串进行比较,例如:

代码语言:javascript
运行
复制
char RESP_OK[]                  = "OK";
char RESP_ERROR[]               = "ERROR";
char RESP_FAIL[]                = "FAIL";

最简单的方法是什么?

编辑:我的问题只是关于数据比较和数据传递到一个函数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-03 10:35:17

只要uartRX_data中的字符串为NULL终止,您就应该能够使用strcmp,如下所示:

代码语言:javascript
运行
复制
if (strcmp((const char *)uartRX_data, RESP_OK) == 0)
{
  // handle OK
}
else if (strcmp((const char *)uartRX_data, RESP_ERROR) == 0)
{
  // handle ERROR
}
else if (strcmp((const char *)uartRX_data, RESP_FAIL) == 0)
{
  // handle FAIL
}
else
{
  // handle unknown response
}
票数 4
EN

Stack Overflow用户

发布于 2019-05-03 13:54:28

charsigned charunsigned charint8_tuint8_t之间的转换大多被认为是安全的。这些是字符类型,有各种特殊的例外,使它们比其他类型更加“粗糙”。

具体来说,字符类型:

  • 不可能不对齐。
  • 不能包含填充位或陷阱表示。
  • 具有有效类型/严格混叠规则的例外情况。
  • 总是大小为1字节。

这意味着您可以在不同字符类型之间进行各种形式的任意转换。除了少数例外:

  • 当从无符号类型转到有符号类型时,数据可能不一定适合,您将覆盖符号位。这可能会导致错误。
  • 如果存在,“丢弃”constvolatile限定符是危险的。

因此,从uint8_t*转换到char*并将数据作为另一种类型(char*)uartRX_data取消引用是安全的。特别是,如果您知道uint8_t数组只包含有效的7位字符,而MSB从不设置,并且在数组的末尾为空终止。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55967430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档