你好,好心的StackOverflow的人们。
我使用PubSubClient库在MQTT上发布和接收消息。但我正与以正确的“格式”接收数据作斗争。
这个库中的回调函数使用一个*字节来处理来自MQTT的有效负载,但是我需要将这个*字节转换为字符串。
我希望收到“dragon”和“boa”的有效负载,所以我需要对不同的字符串做出反应。
请参见下面的代码以供参考。
我希望有人能给我指明正确的方向:-)
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print((char)payload);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
if (payload = "dragon"){
Serial.println("dragon");
}
else if (payload = "boa"){
Serial.println("boa");
}
// Switch on the LED if an 1 was received as first character
if ((char)payload[0] == '1') {
digitalWrite(BUILTIN_LED, LOW); // Turn the LED on (Note that LOW is the voltage level
// but actually the LED is on; this is because
// it is active low on the ESP-01)
}
else {
digitalWrite(BUILTIN_LED, HIGH); // Turn the LED off by making the voltage HIGH
}
您不能只将有效载荷
强制转换为字符*
。Payload
是接收字节数组,length
是该数组中接收数据的大小。如果字节是字符,并且您知道在该数组中还分配了一个位置,则可以将0放到有效载荷[length]
,通过强制转换到char*
,它将成为以零结尾的字符串。但是您无法知道是否有多分配的一个字节,因此您必须将有效负载复制到您的字符缓冲区中,并在结尾处设置一个零。
您可以使用strcmp
C函数比较字符串,也可以使用memcmp将payload
与字符串进行比较。