我已经编写了MQTT客户端回调函数,并且我的代码从不调用handleEmptyJsonMessage()
。在我看来(char*
)转换或strcmp
函数不能按我期望的那样工作。
如何将byte *payload
与字符串/ char[]
进行比较?
void mqttCallback(char *topic, byte *payload, unsigned int length)
{
if (strcmp((char*)payload, "{}") == 0) {
handleEmptyJsonMessage();
} else {
Serial.println("skip message");
}
}
答案 0 :(得分:2)
在payload
字符终止的意义上,您的\0
缓冲区可能不是字符串。
更好地使用
strncmp((char*)payload, "{}",length) == 0)
请注意,对payload
内容的正确处理取决于问题中未描述的语义。例如。需要保证length
不超过payload
缓冲区;如果payload
的字符串长于"{}"
,请决定是否要将该字符串视为相等。
无论如何,strxxx
函数需要一个以\0
结尾的字符串;否则很有可能产生不确定的行为。