任务:Mqtt_client ROS环境下:
任务一: 将struck 转为字节流格式;
目前的思路是利用C++ 中的memcpy函数,函数使用相关具体介绍【1】、使用示例参考【2】。参考例程子啊结构体中写了一下几行代码,并成功运行(成功将结构体中的内容转换成字节流)
输出如下:
任务二:将字节流所包含的解码为结构体
实现对字节流转换为结构体,,成功运行的代码如下所示:
任务三:字节流的长度问题(字节对齐)
由任务二我们可以看到数据长度为24,但实际上数据长度为21,因为VC和GCC(MinGW)的默认设置为8字节对齐,代码会自动补上凑齐几个零。因此,为了解决和远程主机是否可以对齐的问题。因此修改结构体末尾加上
__attribute__((packed))
其运行结果如图:
或者在程序最上方加上 #pragma pack (n) 其中n为数据结构的对齐值
str_convert.cpp
任务四:将字节流以MQTT消息发送出去
参考网站:[ubunbtu下基于c++实现MQTT客户端通信]
使代码能够连接到 MQTT 代理、向代理发布消息、订阅主题和接收发布的消息。
mqtt_client.hpp
#ifndef __MQTT_CLIENT_TO_CLOUD_HPP__
#define __MQTT_CLIENT_TO_CLOUD_HPP__
#include <mqtt/async_client.h> // mqtt库头文件
#include <mqtt/topic.h> // mqtt库头文件
namespace cloud {
//! Handler on cloud message
using message_handler = std::function<void(const std::string&)>;
class mqtt_client
{
public: