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