MQTT简介之三(3) MQTT协议 报文的剩余长度如何计算和编码

1.固定报头中剩余长度

     

     剩余长度 = 可变报头长度 + 负载长度

     固定报头中剩余长度最少1个字节,最多4个字节,因为剩余长度使用的是一种变长度的编码方案。

 2.固定报头中剩余长度 是128进制

     

            每个字节的最高位置1表示还需要另外一个字节来组合表示剩余数据长度

     2.1 固定报头中剩余长的编码

           1.确定需要几个字节,设置标志位 位7

           2.计算每个字节的具体内容,构成 位0~位6

           3.位0~位6结合标志位位7,完成剩余长度

    2.2 剩余长度例子

           ① 100,100/128=0,等于0无需仅为,所以bit7是0,然后100%128=100,所以bit0~bit6就是0x64,剩余长度就是1个字节,0x64.

           ②1000,1000/128=7,不等于0需要进位,然后7/128=0,等于0无需再进位,所以总体长度进1位,需要2个字节,第1个字节bit7是1,第二字节bit7是0。然后1000%128=104,所以第1个字节bit0~bit6就是0x68,然后7%128=0,所以第二个字节

                bit0~bit6就是0x07,然后再结合上bit7的话,就是0xE8和0x07

           ③10000,10000/128 = 781,不等于0需要进位,然后781/128=6,不等于0再进一位,6/128=0,等于0无需再进位了,所以总体进2位,需要3个字节,第一个字节bit7是1,第2个字节bit7是1,第3个字节bit7是0.然后10000%128=32,就是0x0d,

               所以第一个字节bit0~bit6就是0x20,然后781%128=13,所以第2个字节bit0~bit6就是0x0d,然后6%128=6,所以第3个字节bit0~bit6就是0x06,然后再结合上bit7的话,就是0xA0,0x80,0x06

           ④100000000,100000000/128 = 781250,不等于0需要进位,然后 781250/128=6103,不等于0再进一位,,然后 6103/128=47,不等于0再进一位,47/128=0,等于0无需再进位了,所以总体进3位,需要4个字节,第一个字节bit7是1,

               第2个字节bit7是1,第3个字节bit7是1.,第4个字节bit7是0. 然后100000000%128=0,就是0x00,所以第一个字节bit0~bit6就是0x00,然后781250%128=66,所以第2个字节bit0~bit6就是0x42,然后 6103%128=87,所以第3个字节bit0~bit6就是0x57,

               然后 47%128=47,所以第4个字节bit0~bit6就是0x2F,然后再结合上bit7的话,就是0x80,0xC2,0xD7,0x2F

         


版权声明:本文为caofengtao1314原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。