剩余长度 - 简介

  • 位置:固定报头中,从第2个字节开始
  • 剩余长度等于可变报头的长度(10字节)加上有效载荷的长度
  • 剩余长度(Remaining Length)表示当前报文剩余部分的字节数,包括可变报头和负载的数据
  • 剩余长度不包括用于编码剩余长度字段本身的字节数。

剩余长度字段 的帧格式:

帧格式 - 剩余长度字段
第1个字节 第2个字节 ...
Bit 7 Bit 6:0 Bit 7 Bit 6:0 ...
进位标志位 长度低字节 进位标志位 长度高字节 ...
  • 剩余长度字段 的字节长度:最少1个字节,最多4个字节。
  • 剩余长度字段 可以表示的长度:1个字节时,可以表示剩余 0~127 长度。4个字节时,最大表示长度为 2^(7*4) - 1 = 2^28 - 1 = 268435455 长度
剩余长度字段 表示的字节长度
字节数 表示长度的最小值(字节) 表示长度的最大值(字节)
1 0 2^7 - 1 = 127
2 2^7 = 128 2^(7*2) - 1 = 16383
3 2^(7*2) = 16384 2^(7*3) - 1 = 2097151
4 2^(7*3) = 2097152 2^(7*4) - 1 = 268435455
  • 提示

之所以1个字节不能表示 2^8 - 1 = 255长度,是因为:每个字节的最高位 Bit7,并不表示数据,是进位标志位

剩余长度 - 计算

  • 示例1

假设本帧剩余字节为 200,计算剩余长度字段。

  1. 使用电脑计算器,将 200 转换为二进制 1100 1000(MSB高位在前)
  2. 从右侧低位每7Bit进行一次拆分,依次拆分出:
  3. 第1个字节为 100 1000,有进位,高位加上进位1为 1100 1000 = 0xC8 (16进制)。
  4. 第2个字节为 1,无进位,为 1 = 0x01 (16进制)。

那么对应的 字节长度的帧格式如下表:

  第1个字节 第2个字节
  Bit 7 Bit 6:0 Bit 7 Bit 6:0
  进位标志位   进位标志位  
2进制 1 100 1000 0 000 0001
2进制 1100 1000 0000 0001
16进制 0xC8 0x01
  • 示例2

假设本帧剩余字节为 1000,计算剩余长度字段。

  1. 使用电脑计算器,将 1000 转换为二进制 11 1110 1000(MSB高位在前)
  2. 从右侧低位每7Bit进行一次拆分,依次拆分出:
  3. 第1个字节为 110 1000,有进位,高位加上进位1为 1110 1000 = 0xE8 (16进制)。
  4. 第2个字节为 11 1,无进位,为 11 1 = 0x07 (16进制)。

那么对应的 字节长度的帧格式如下表:

  第1个字节 第2个字节
  Bit 7 Bit 6:0 Bit 7 Bit 6:0
  进位标志位   进位标志位  
2进制 1 110 1000 0 000 0111
2进制 1110 1000 0000 0111
16进制 0xE8 0x07
  • 示例3

假设本帧剩余字节为 100,000,000,计算剩余长度字段。

  1. 使用电脑计算器,将 100,000,000 转换为二进制 101 1111 0101 1110 0001 0000 0000(MSB高位在前)
  2. 从右侧低位每7Bit进行一次拆分,依次拆分出:
  3. 第1个字节为 000 0000,有进位,高位加上进位1为 1000 0000 = 0x80 (16进制)。
  4. 第2个字节为 10 0001 0,有进位,高位加上进位1为 1100 0010 = 0xC2 (16进制)。
  5. 第3个字节为 1 0101 11,有进位,高位加上进位1为 1101 0111 = 0xD7 (16进制)。
  6. 第4个字节为 101 111 = 00,无进位,为 10 1111 = 0x2F (16进制)。

那么对应的 字节长度的帧格式如下表:

  第1个字节 第2个字节 第3个字节 第4个字节
  Bit 7 Bit 6:0 Bit 7 Bit 6:0 Bit 7 Bit 6:0 Bit 7 Bit 6:0
  进位标志位   进位标志位   进位标志位   进位标志位  
2进制 1 000 0000 1 100 0010 1 101 0111 0 010 1111
2进制 1000 0000 1100 0010 1101 0111 0010 1111
16进制 0x80 0xC2 0xD7 0x2F

MQTT 固定报头 中 剩余长度字段的计算相关推荐

  1. Linux SKB结构体中各个长度字段的含义(len, data_len, headlen, pagelen)

    结构体sk_buff是Linux内核网络子系统的一个基本结构体,关于它的长度有很多定义和操作,非常容易弄混,这里给出一个简单的说明. 下面这幅图是<深入理解Linux网络技术内幕>里面的图 ...

  2. MQTT工作笔记0007---剩余长度

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这节重点说一下这个剩余长度,其实就是??的部分,用来表示,后面的数据的长度 比如这个后面的数据还有 ...

  3. oracle长度字段,【转】Oracle中如何取一个字段的定义长度

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 项目开发中遇到了获取Oracle字段定义的长度问题,现在将此总结一下,希望能给需要此需求的同行们有个帮助. 在Oracle中获取一个字符的长度的方法很简单 ...

  4. mysql中修改表字段名/字段长度/字段类型详解

    在mysql中我们对数据表字段的修改命令只要使用alter就可以了,下面我来给大家详细介绍mysql中修改表字段名/字段长度/字段类型等等一些方法介绍,有需要了解的朋友可参考. 先来看看常用的方法 M ...

  5. oracle 取字段长度为5,oracle9i中varchar2(5)字段长度不足5前面补0?

    oracle9i中varchar2(5)字段长度不足5前面补0? mip版  关注:201  答案:2  悬赏:20 解决时间 2021-01-19 11:34 已解决 2021-01-18 23:5 ...

  6. 修改mysql表的字段名_mysql中修改表字段名/字段长度/字段类型详解

    在mysql中我们对数据表字段的修改命令只要使用alter就可以了,下面我来给大家详细介绍mysql中修改表字段名/字段长度/字段类型等等一些方法介绍,有需要了解的朋友可参考. 先来看看常用的方法 M ...

  7. datagrid如何获取一行数据中的某个字段值_或许是全网最全面关于数据库面试题...

    原文: https://www.enmotech.com/web/detail/1/794/1.html 两万字全面论述数据库面试题(上) https://www.enmotech.com/web/d ...

  8. Java中的length字段和length()方法

    本文主要讲述Java中的length字段和length()方法,有需要的朋友可以参考下,更多Java教程知识,请登陆疯狂软件教育官网. 首先,你能快速回答下面的问题吗? 如果没有IDE(集成开发环境) ...

  9. linux中top命令cpu,ps命令中的%CPU字段和top命令中的%CPU字段

    一.ps命令中%CPU字段的含义 1."man ps"中的解释 CPU usage is currently expressed as the percentage of time ...

最新文章

  1. python逆序打印出各位数字_Python练习题 024:求位数及逆序打印
  2. 基于UDP的DDos反射放大攻击
  3. 数学之美 系列十三 信息指纹及其应用
  4. union共用体(联合体)、宏定义、枚举
  5. 人的手臂的自由度的数目以及六自由度机械臂的限制
  6. js java传参乱码_【技术贴】解决前台js传参中文乱码
  7. mysql 创建表字段长度范围_老板要我把这份MySQL规范贴在工位上!
  8. 自定义Angular服务
  9. layui的表格可以动态添加行吗_Layui数据表格动态添加行的处理方式(原生HTML方式)...
  10. librdkafka------C kafka Client
  11. android 属性动画源码分析
  12. c语言大作业酒店管理系统,管理信息系统大作业《酒店管理系统》.doc
  13. qt Android 基站定位,AT指令获取基站信息
  14. 在任意位置Reset掉任意的TCP连接
  15. 排水管网信息系统、市政排水管网信息化智慧化管理
  16. 江枫谈淘宝“双十一”事件中的数据库架构优化
  17. android 自定义控件之AutoCompleteTextView邮箱后缀自动补全
  18. 【pandas】--DataFrame数据筛选(二)
  19. OpenVINO工具套件高级课程第一课:如何充分使用OpenVINO工具套件?
  20. ArcGIS计算面状河流的长度(河流中心线)

热门文章

  1. 使用Highcharts实现柱状图展示
  2. 紫书搜索 习题7-6 UVA - 12113 Overlapping Squares 暴力
  3. mongodb batchInsert
  4. 【渗透测试案例】——Web前端的SQL注入是怎么回事?
  5. vnpy学习11_增加测试评估指标
  6. mongo java aggregate_java使用spring + mongo进行Aggregation聚合查询
  7. hibernate 读取mysql表结构_为什么要用hibernate 与基于数据库表结构的项目开发
  8. 做了3年Excel报表,换了这个报表神器后,不禁感叹:国产真香
  9. 别再跟我提Excel了!这才是阿里大厂都在用的数据分析神器
  10. 有了数据湖,距离数据仓库消失还有几年?