当函数仅支持String类型时,将数据作为二进制十六进制发送

时间:2016-01-14 05:08:20

标签: c++ string arduino mqtt

我正在使用一个接受String对象作为参数的函数。该函数用于通过MQTT协议发送数据。我需要通过MQTT发送二进制数据。我设法做到了,但我的解决方案存在问题。这是相关的代码;

MqttClient mqtt("192.168.1.71", 1883, onMessageReceived);
char buffer[100];
//buffer filled with binary data terminated with null character at this point
mqtt_msg = String(buffer);
String topic = "XXX";
mqtt.publish(topic, mqtt_msg );

我将使用空字符0x00终止缓冲区中的二进制数据。当0x00恰好是二进制数据的一部分时,问题就来了。如何解决这个问题?

String对象类似于Arduino中使用的String对象。

1 个答案:

答案 0 :(得分:2)

您在发送数据之前是否考虑过base64编码数据?这将提供数据的字符串安全版本,但在使用之前需要解码。

这是一个Arduino base64库(我自己不用)

https://github.com/adamvr/arduino-base64