关于MQTT固定标头结构?

用户名

我正在尝试实现一个MQTT图书馆。并且根据一个教程,该MQTT消息的固定标头应如图所示,如图所示。

同样在同一教程中,我发现固定标头的编码方法写为:

mqtt.write((byte) ((retain ? 1 : 0) | qos << 1 | (dup ? 1 : 0) << 3 | type << 4));

我的问题是,根据贴在固定头规格,田野retainqosdupmsg type应该有1214位分别。

为什么将msg type字段扩展到5位“ << 4”,然后将字段dup扩展到4 bits“ << 3”?

Fixed_Header 在此处输入图片说明

Boann

为什么将msg类型字段扩展到5位“ << 4”,将字段dup扩展到4位“ << 3”?

<<不“扩展”字段,而是其向左移动

最初,我们的每个数字如下所示:

bit: |   7   |   6   |   5   |   4   |   3   |   2   |   1   |   0   |
======================================================================
                                     |------------- type ------------|
                                                             |- dup -|
                                                     |----- qos -----|
                                                             | retain|

假设每个数字都在该字段的有效范围内,则它们已经是正确的宽度。具体来说,type它的值可以为0到15,因此(最多)为4位宽;dup并且retain必须为0或1,所以只有1位宽;qos可以具有0到3的值,该值是2位宽。

但是,它们在错误的位置。它们卡在低位(3,2,1,0)中。我们需要将它们向左移动以将它们放置到正确的位置:

bit: |   7   |   6   |   5   |   4   |   3   |   2   |   1   |   0   |
======================================================================
     |----------- type<<4 -----------|                                
                                     | dup<<3|                        
                                             |---- qos<<1 ---|        
                                                             | retain|

例如,dup将左移3位,因为我们要在其下3个空格(实际上是值为0的位)。retain不需要移动,因为它恰好位于正确的位置。

一旦所有位都位于正确的位置,就可以使用以下方式它们进行“或”运算|

bit: |   7   |   6   |   5   |   4   |   3   |   2   |   1   |   0   |
======================================================================
     |----------- type<<4 -----------| dup<<3|---- qos<<1 ---| retain|

想要什么。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

固定标头的值

来自分类Dev

重叠动态固定标头

来自分类Dev

高度固定的CSS固定标头

来自分类Dev

使用CSS的HTML表固定标头

来自分类Dev

在固定标头之后添加元素

来自分类Dev

偏移固定标头的锚点部分

来自分类Dev

200滚动后的jQuery固定标头

来自分类Dev

固定标头影响锚点

来自分类Dev

固定标头引导程序的位置

来自分类Dev

PhoneGap上的jQuery移动固定标头

来自分类Dev

如何使用SlickNav制作固定标头

来自分类Dev

使用CSS的HTML表固定标头

来自分类Dev

使固定标头看起来持久

来自分类Dev

GridView固定标头溢出容器

来自分类Dev

平稳滚动的固定标头帐户

来自分类Dev

HTML固定标头失败ID使用

来自分类Dev

在bootstrap 3 modal中固定标头位置

来自分类Dev

具有固定标头的Angular Js无限滚动

来自分类Dev

引导表固定标头不起作用

来自分类Dev

Twitter Bootstrap模态打开/关闭导致固定标头跳转

来自分类Dev

Bootstrap导航栏-从移动设备中删除固定标头

来自分类Dev

ng-grid弹性高度插件和固定标头

来自分类Dev

固定标头的偏移锚点,但保持永久链接不变

来自分类Dev

如何获得带有固定标头的Richlistbox?

来自分类Dev

如何使用CSS在Mobile上禁用固定标头

来自分类Dev

material-ui LeftNav中的固定标头

来自分类Dev

根据固定标头的高度偏移内容的上边距

来自分类Dev

数据表固定标头不向左或向右滚动

来自分类Dev

如何使用CSS平滑滚动补偿固定标头?