OASIS標(biāo)準(zhǔn)在MQTT3.1.1協(xié)議描述中已經(jīng)介紹了一種對(duì)剩余字符長(zhǎng)度的計(jì)算方法如下圖:
官方提供的算法并不能直接引入TPC7062的腳本中,筆者并未在TPC腳本函數(shù)說明中找到類似與do…while(條件判斷式)的函數(shù),好在MQTT協(xié)議規(guī)定了最大可編碼的長(zhǎng)度為4字節(jié),筆者通過下列腳本可以實(shí)現(xiàn)與官方推薦方法等同效果,腳本如下(水平有限,有更好的方法歡迎在官網(wǎng)留言討論)。
MQTT協(xié)議中有兩種計(jì)算字符的需求,一是可變長(zhǎng)度(剩余字符長(zhǎng)度),二是字符長(zhǎng)度,使用開關(guān)型或者數(shù)值型變量“LEN_STR_BUF_HEX_MODE”區(qū)分計(jì)算方法。
新建用戶策略并添加兩排策略行
長(zhǎng)度計(jì)算傳入帶計(jì)算長(zhǎng)度的字符,并使用“!Len(str)”函數(shù)計(jì)算出字符的10進(jìn)制長(zhǎng)度,通過DECàHEX轉(zhuǎn)化為16進(jìn)制字符串。
剩余計(jì)算原理,(x表示傳入10進(jìn)制長(zhǎng)度)協(xié)議規(guī)定最大長(zhǎng)度計(jì)算為4字節(jié),因此定義3個(gè)變量分別存儲(chǔ)x/128、x/128/128、x/128/128/128,在定義4個(gè)變量(…_BIT_1~4)保存每一位的計(jì)算結(jié)果:
1、 若小于127字節(jié)直接轉(zhuǎn)換并存儲(chǔ)在_BIT_1中;
2、 若大于127小于16383,需要使用兩位存儲(chǔ)數(shù)據(jù),_BIT_1存入(x MOD 128)+128,_BIT_2存入x/128取整的值;
3、 若大于16384小于2097151,需要使用三位存儲(chǔ)數(shù)據(jù),_BIT_1存入(x MOD 128)+128,_BIT_2存入(x/128 MOD 128)+128,_BIT_3存入x/128/128取整的值;
4、 若大于2097152小于268435455,需要使用四位存儲(chǔ)數(shù)據(jù),_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協(xié)議規(guī)定的最大字符;
腳本參考“可變長(zhǎng)度緩存”腳本。
1.兩個(gè)字節(jié)的計(jì)算方式:
剩余長(zhǎng)度=(Byte1-128)+Byte2*128
2.三個(gè)字節(jié)的計(jì)算方式:
剩余長(zhǎng)度=(Byte1-128)+[(Byte2-128)+Byte3*128]*128
3.以此類推,四個(gè)字節(jié)的計(jì)算方式為:
剩余長(zhǎng)度=(Byte1-128)+{(Byte2-128)+[(Byte3-128)+Byte4*128]*128}*128
億佰特人每一天都致力于更好的助力物聯(lián)化、智能化、自動(dòng)化的發(fā)展,提升資源利用率,更多產(chǎn)品更多資料,感興趣的小伙伴可以登錄我們的官網(wǎng)/行了解,還有客服小姐姐在線答疑哦!成都億佰特--物聯(lián)網(wǎng)應(yīng)用專家,隨時(shí)在身邊,時(shí)刻準(zhǔn)備為您服務(wù)!
相關(guān)內(nèi)容推薦:
PC7062封裝MQTT協(xié)議鏈接報(bào)文步驟教程
PC7062封裝MQTT協(xié)議發(fā)布報(bào)文教程
7 X 24 銷售服務(wù)熱線
4000-330-990深圳辦事處柯經(jīng)理:18218726658 無錫辦事處劉經(jīng)理:13558641933
成都總部銷售經(jīng)理:
秦 科(無線模塊):18884314654 馮子恒(無線模塊):18828049434
蔡友銀(無線模塊):13882211021 葛宇龍(通信設(shè)備):19138800613
胡兵(外貿(mào)銷售經(jīng)理):18584911141、 sales06@ebyte.com
業(yè)務(wù)郵箱:support@cdebyte.com 全國銷售投訴電話:19934352316
地址:四川省成都市高新西區(qū)西區(qū)大道199號(hào)B5棟(前臺(tái)座機(jī):028-61543675)
?? 成都億佰特電子科技有限公司【版權(quán)所有】 蜀ICP備13019384號(hào)