MQTT剩余长度字段的编码方案

MQTT剩余长度字段的编码方案是一种变长度的编码方案,主要用于表示当前报文剩余部分的字节数,包括可变报头和负载的数据,但不包括用于编码剩余长度字段本身的字节数。该编码方案的具体特点如下:

1. 字节数与范围

  • 最少占用1个字节:当剩余长度小于或等于127时。
  • 最多占用4个字节:当剩余长度非常大时,最多需要4个字节来表示。

不同字节数对应的剩余长度范围如下:

字节数剩余长度范围(十进制)剩余长度范围(十六进制)
10 - 1270x00 - 0x7F
2128 - 16,3830x80,0x01 - 0xFF,0x7F
316,384 - 2,097,1510x80,0x80,0x01 - 0xFF,0xFF,0x7F
42,097,152 - 268,435,4550x80,0x80,0x80,0x01 - 0xFF,0xFF,0xFF,0x7F

2. 编码规则

  • 低7位有效位:每个字节的低7位(Bit0 ~ Bit6)用于编码数据,表示实际的剩余长度值的一部分。
  • 最高有效位(Bit7):用作延续位(continuation bit),当Bit7为1时,表示后面还有更多的字节来表示剩余长度;当Bit7为0时,表示剩余长度的编码到此结束。

3. 编码示例

  • 剩余长度100

    • 100/128=0,无需进位,Bit7为0。
    • 100%128=100,即Bit0~Bit6为0x64。
    • 因此,剩余长度编码为1个字节,即0x64。
  • 剩余长度1000

    • 1000/128=7,需要进位,Bit7为1。
    • 7/128=0,无需再进位,但前面已有进位,所以总体需要2个字节。
    • 1000%128=104,即第一个字节的Bit0Bit6为0x68;7%128=7,即第二个字节的Bit0Bit6为0x07。
    • 因此,剩余长度编码为2个字节,即0xE8 0x07(注意,0xE8的Bit7为1,表示有进位)。

4. 解码算法

解码时,从第一个字节开始,不断读取并累加每个字节的低7位表示的数值,同时检查最高位(Bit7)是否为1。如果Bit7为1,则继续读取下一个字节;如果Bit7为0,则解码结束。

5. 总结

MQTT剩余长度字段的编码方案通过变长度的字节序列来表示可能的很大范围的剩余长度值,最高可达268,435,455字节(即256MB),这种设计使得MQTT协议能够高效地处理不同大小的报文。同时,该编码方案也考虑了编码后的数据紧凑性,减少了传输过程中的数据冗余。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值