mqtt协议c语言实现,C语言实现MQTT剩余长度的解析

本文说一边RX的时候解析别人的包

int iotx_mc_decode_packet(iotx_mc_client_t *c, int *value, int timeout)

{

char i;

int multiplier = 1;

int len = 0;

const int MAX_NO_OF_REMAINING_LENGTH_BYTES = 4;

if (!c || !value) {

return FAIL_RETURN;

}

*value = 0;

do {

int rc = MQTTPACKET_READ_ERROR;

if (++len > MAX_NO_OF_REMAINING_LENGTH_BYTES) {

return MQTTPACKET_READ_ERROR; /* bad data */

}

rc = c->ipstack.read(&c->ipstack, &i, 1, timeout == 0 ? 1 : timeout);

if (rc == 0) {

return FAIL_RETURN;

} else if (rc != 1) {

return MQTT_NETWORK_ERROR;

}

printf("【我】在次去读1个数据(每次读一个).它就是&i,它代表头部第二部分-长度,现在i=%02X,看看(i & 0X80)=%02X \r\n ",i,(i & 0X80) );

*value += (i & 0X7F) * multiplier;

multiplier *= 0X80;//0X80就是128!也就是128进制 第一个*1  第二个*128 第三个*128*128

printf("【我】分析一下--长度value=%02X\r\n",*value);

if(i==0)return 0;

} while ((i & 0X80) != 0);

printf("【我】分析结论value=%02X ",*value);

return len;

}

他就是去读!一个一个的读!!条件是:while ((i & 0X80) != 0);

也即是最高位BIT7只要是1 就继续读!!!标识后面还是剩余长度!

读出的数据

*value += (i & 0X7F) * multiplier;

multiplier *= 128;

即可!!!!!!

最后value就是报文长度

原文链接:https://blog.csdn.net/weixin_42381351/article/details/89679952

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值