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

如何将uint8_t数组与C中的字符串进行比较?,c,string,uint8t,C,String,Uint8t,我有一个通过UART的输入 uint8_t uartRX_data[UART_RX_BUF_SIZE]=""; 我需要将此数据传递给函数。在此函数中,我想将其与预定义字符串进行比较,如: char RESP_OK[] = "OK"; char RESP_ERROR[] = "ERROR"; char RESP_FAIL[] = "FAIL"; 最简单的方法是什么 编辑:我的问题只是关于数据比较和传递给

我有一个通过UART的输入

uint8_t uartRX_data[UART_RX_BUF_SIZE]="";
我需要将此数据传递给函数。在此函数中,我想将其与预定义字符串进行比较,如:

char RESP_OK[]                  = "OK";
char RESP_ERROR[]               = "ERROR";
char RESP_FAIL[]                = "FAIL";
最简单的方法是什么


编辑:我的问题只是关于数据比较和传递给函数的数据

只要
uartRX\u data
中的字符串以NULL结尾,您就应该能够像这样使用
strcmp

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
}

类型
char
signed char
unsigned char
int8_t
uint8_t
之间的大多数转换都可以认为是安全的。这些是字符类型,有各种特殊的例外情况,使它们比其他类型更“坚固”

具体而言,字符类型:

  • 不能错位
  • 不能包含填充位或陷阱表示
  • 存在有效类型/严格别名规则的例外情况
  • 大小始终为1字节
这意味着您可以在不同的字符类型之间进行各种形式的转换。除了少数例外:

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

因此,可以安全地从
uint8\u t*
转换为
char*
,并将数据反引用为另一种类型,
(char*)uartRX\u数据
。特别是如果您知道
uint8\u t
数组只包含有效的7位字符,且未设置MSB,并且在数组的末尾有空终止符。

uartRX\u data中的数据是以NUL(
'\0'
)字符终止的,还是单独的变量指示缓冲区中的有效字节数?如果缓冲区没有以NUL(
“\0”
)字符终止,它是否有空间添加一个字符?请您的问题添加信息。“uartRX_数据”不是缓冲区的原始数据。我正在事件处理程序下解析原始数据以创建“uartRX_数据”。数据不是以NUL终止的。它只包含字符。那么一个不分隔的字符数组呢?此数组是否会包含除上面列出的3个以外的其他子字符串?请回答您的问题以添加此信息。您如何知道有多少字符在
uartRX\u数据中有效?是否存在包含字符数的变量?缓冲区是否有空间添加NUL?那么只需
strcmp((const char*)uartRX\u数据,RESP\u OK)
等就可以了。