[MQTT]剩余长度的计算--MQTint iotx_mc_decode_packet--RX

前面文章说了一边TX的时候自己组包 

本文说一边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就是报文长度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值