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

时间:2019-05-03 09:56:13

标签: c string uint8t

我有一个通过UART输入的输入。

uint8_t uartRX_data[UART_RX_BUF_SIZE]="";

我需要将此数据传递给函数。而且,在此函数中,我想将其与预定义的字符串进行比较,例如:

char RESP_OK[]                  = "OK";
char RESP_ERROR[]               = "ERROR";
char RESP_FAIL[]                = "FAIL";

最简单的方法是什么?

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

2 个答案:

答案 0 :(得分:3)

只要uartRX_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
}

答案 1 :(得分:1)

this.authService.login(this.username,this.password).subscribe((response : {token: string}) =>{ console.log("Response " + response.token); }); charsigned charunsigned charint8_t类型之间进行的大多数转换可以被认为是安全的。这些是字符类型,并带有各种特殊例外,使它们比其他类型更“坚固”。

具体来说,字符类型:

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

这意味着您可以在不同字符类型之间进行所有形式的狂野转换。除少数例外:

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

因此,可以安全地将volatile转换为uint8_t*并将数据取消引用为另一类型char*。尤其是如果您知道(char*)uartRX_data数组仅包含有效的7位字符,而从未设置过MSB,并且在数组末尾带有空终止符。