MQTT协议字符长度计算
OASIS标准在MQTT3.1.1协议描述中已经介绍了一种对剩余字符长度的计算方法如下图:
官方提供的算法并不能直接引入TPC7062的脚本中,笔者并未在TPC脚本函数说明中找到类似与do…while(条件判断式)的函数,好在MQTT协议规定了最大可编码的长度为4字节,笔者通过下列脚本可以实现与官方推荐方法等同效果,脚本如下(水平有限,有更好的方法欢迎在官网留言讨论)。
剩余字符长度编码
MQTT协议中有两种计算字符的需求,一是可变长度(剩余字符长度),二是字符长度,使用开关型或者数值型变量“LEN_STR_BUF_HEX_MODE”区分计算方法。
新建用户策略并添加两排策略行
长度计算传入带计算长度的字符,并使用“!Len(str)”函数计算出字符的10进制长度,通过DECàHEX转化为16进制字符串。
剩余计算原理,(x表示传入10进制长度)协议规定最大长度计算为4字节,因此定义3个变量分别存储x/128、x/128/128、x/128/128/128,在定义4个变量(…_BIT_1~4)保存每一位的计算结果:
1、 若小于127字节直接转换并存储在_BIT_1中;
2、 若大于127小于16383,需要使用两位存储数据,_BIT_1存入(x MOD 128)+128,_BIT_2存入x/128取整的值;
3、 若大于16384小于2097151,需要使用三位存储数据,_BIT_1存入(x MOD 128)+128,_BIT_2存入(x/128 MOD 128)+128,_BIT_3存入x/128/128取整的值;
4、 若大于2097152小于268435455,需要使用四位存储数据,_BIT_1存入(x MOD 128)+128,_BIT_2存入(x/128 MOD 128)+128,_BIT_3存入(x/128/128 MOD 128)+128,_BIT_4存入x/128/128/128取整值;
5、 大于268435455超出MQTT3.1.1协议规定的最大字符;
脚本参考“可变长度缓存”脚本。
剩余字符长度解码
1.两个字节的计算方式:
剩余长度=(Byte1-128)+Byte2*128
2.三个字节的计算方式:
剩余长度=(Byte1-128)+[(Byte2-128)+Byte3*128]*128
3.以此类推,四个字节的计算方式为:
剩余长度=(Byte1-128)+{(Byte2-128)+[(Byte3-128)+Byte4*128]*128}*128
相关内容推荐:
太阳集团tcy8722人每一天都致力于更好的助力物联化、智能化、自动化的发展,提升资源利用率,更多产品更多资料,感兴趣的小伙伴可以登录我们的官网/行了解,还有客服小姐姐在线答疑哦!成都太阳集团tcy8722--物联网应用专家,随时在身边,时刻准备为您服务!
7 X 24 销售服务热线
4000-330-990深圳办事处柯经理:18218726658 杭州办事处戴经理:17512568697
常州办事处崔经理:15906110783 南京办事处葛经理:17626012283
业务邮箱:support@cdhanzaichips.com
全国销售投诉电话:19934352316
地址:四川省成都市高新西区西区大道199号B5栋(前台座机:028-61543675)
©© 成都太阳集团tcy8722电子科技有限公司【版权所有】 蜀ICP备27697263号-3