如何将 uint8_t 数组与 C 中的字符串进行比较?
How to compare uint8_t array to a string in C?
我有一个来自 UART 的输入。
uint8_t uartRX_data[UART_RX_BUF_SIZE]="";
我需要将此数据传递给一个函数。而且,在这个函数中,我想将它与预定义的字符串进行比较,例如:
char RESP_OK[] = "OK";
char RESP_ERROR[] = "ERROR";
char RESP_FAIL[] = "FAIL";
最简单的方法是什么?
编辑:我的问题只是关于数据比较和传递给函数的数据。
只要 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
}
大多数char
、signed char
、unsigned char
、int8_t
和uint8_t
类型之间的转换都可以认为是安全的。这些是字符类型,并带有各种特殊例外,使它们比其他类型"rugged"更多。
具体的字符类型:
- 不能错位。
- 不能包含填充位或陷阱表示。
- 有效 type/strict 别名规则有例外。
- 总是 1 字节大小。
这意味着您可以在不同字符类型之间进行各种疯狂的转换。除了少数例外:
- 当从无符号类型变为有符号类型时,数据可能不一定适合,您将覆盖符号位。这可能会导致错误。
- "cast away"
const
或 volatile
限定符(如果存在)是危险的。
因此,从 uint8_t*
转换为 char*
并将数据取消引用为另一种类型 (char*)uartRX_data
是安全的。特别是如果您知道 uint8_t
数组仅包含有效的 7 位字符,但从未设置 MSB,并且在数组末尾有空终止符。
我有一个来自 UART 的输入。
uint8_t uartRX_data[UART_RX_BUF_SIZE]="";
我需要将此数据传递给一个函数。而且,在这个函数中,我想将它与预定义的字符串进行比较,例如:
char RESP_OK[] = "OK";
char RESP_ERROR[] = "ERROR";
char RESP_FAIL[] = "FAIL";
最简单的方法是什么?
编辑:我的问题只是关于数据比较和传递给函数的数据。
只要 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
}
大多数char
、signed char
、unsigned char
、int8_t
和uint8_t
类型之间的转换都可以认为是安全的。这些是字符类型,并带有各种特殊例外,使它们比其他类型"rugged"更多。
具体的字符类型:
- 不能错位。
- 不能包含填充位或陷阱表示。
- 有效 type/strict 别名规则有例外。
- 总是 1 字节大小。
这意味着您可以在不同字符类型之间进行各种疯狂的转换。除了少数例外:
- 当从无符号类型变为有符号类型时,数据可能不一定适合,您将覆盖符号位。这可能会导致错误。
- "cast away"
const
或volatile
限定符(如果存在)是危险的。
因此,从 uint8_t*
转换为 char*
并将数据取消引用为另一种类型 (char*)uartRX_data
是安全的。特别是如果您知道 uint8_t
数组仅包含有效的 7 位字符,但从未设置 MSB,并且在数组末尾有空终止符。