MQTT協議剩餘長度計算方法

2021-01-11 腦洞DIY日記

MQTT協議是目前物聯網通訊中使用最廣泛的通訊協議之一,協議簡單數據快速。協議本身很容易懂,只是數據長度的計算難倒了很多人。這裡我進行簡單的舉例,幫忙大家理解。

從GIT上抓圖,可以看到剩餘長度的字節是變長度的。

首先,收到字節集數據之後,將數據的十六進位代碼截取,判斷可變長度佔多少字節。判斷方式為:判斷第一個字節是否大於127,如果是,接著判斷下一個字節,一直到小於或等於127的那個字節,字節數量最大為4,超過4則代碼錯誤。放棄讀取。

假設每個字節的十進位整數為Byte1~Byte4

單個字節很好計算,即直接將十六進位轉換為十進位

兩個字節的計算方式:

剩餘長度=(Byte1-128)+Byte2*128

三個字節的計算方式:

剩餘長度=(Byte1-128)+[(Byte2-128)+Byte3*128]*128

以此類推,四個字節的計算方式為:

剩餘長度=(Byte1-128)+{(Byte2-128)+[(Byte3-128)+Byte4*128]*128}*128

反算該如何計算呢?

首先判斷屬於幾個字節,即剩餘長度的範圍

0~127為單字節,即剩餘長度直接轉換為十六進位

128~16838為兩個字節,

先按照說明書上的寫法計算最後字節,即Byte2。

do

encodedByte = X MOD 128

X = X DIV 128

if ( X > 0 )

encodedByte = encodedByte OR 128

Endif

while ( X > 0 )

然後再計算Byte1,反算方式如下:

Byte1=(總長度-encodedByte*128)+128

Byte2=encodedByte

因為剩下的三個字節和四個字節涉及到的計算比較複雜,所以我們利用計算機的強大計算能力,採用迭代的方式進行計算。

如下為了便於理解採用是易語言程序的計算方式:

三個字節的算法:

Byte1=S1+128

Byte2=S2+128

Byte3=encodedByte

四個字節的算法:

Byte1=S1+128

Byte2=S2+128

Byte3=S3+128

Byte4=encodedByte

相關焦點

  • 二次剩餘——第一個零知識證明協議的歷史背景與證明方法|火星技術帖
    小編:記得關注哦來源:安比實驗室SECBIT原文標題:三分鐘了解第一個零知識證明協議的歷史背景與證明方法完整介紹了第一個零知識證明協議的背景知識、構造以及證明。第一個正式的零知識證明協議是二次剩餘 (Quadratic Residue) 的判定,通過它,我們介紹零知識證明中的工具——計算不可區分(computationally indistinguable) 和模擬範式(simulation paradigm),並且給出必要的證明。
  • MQTT協議的優缺點列舉
    用戶終端從傳統計算機擴展到任何設備,其中該設備先通過各種傳感器收集信息,然後再通過計算設備收集信息、交換和交流網絡信息。之所以出現MQTT協議,是因為移動網際網路目前尚處於起步階段,無法提供可靠的網絡保證。 一、MQTT具有許多優點 MQTT的獨特功能是每個消息頭都可以縮短為2個字節。
  • 物聯網應用層協議選擇和分析--MQTT、CoAP 、HTTP、XMPP、SoAP
    Transport,消息隊列遙測傳輸)最早是IBM開發的一個即時通訊協議,MQTT協議是為大量計算能力有限且工作在低帶寬、不可靠網絡的遠程傳感器和控制設備通訊而設計的一種協議。 5、小型傳輸,開銷很小(固定長度的頭部是 2 字節),協議交換最小化,以降低網絡流量; 6、使用 Last Will 和 Testament 特性通知有關各方客戶端異常中斷的機制; 在MQTT協議中,一個MQTT數據包由:固定頭(Fixed header)、 可變頭(Variable header)、 消息體(payload)三部分構成。
  • 不鏽鋼軟接頭的長度計算方法
    不鏽鋼軟接頭的長度計算方法不鏽鋼軟接頭也被稱為不鏽鋼軟連接金屬管道,在我們日常生活中有著十分廣泛的使用,在很多領域都可以看到它的身影,不鏽鋼軟接頭不僅具有良好的可燒性,還具有耐溫耐腐蝕等性能,比較適用於蒸汽、水油類以及各種工業氣體、藥品等介質的輸送,同時不鏽鋼軟接頭對管道系統的運動
  • 物聯網架構各個層次使用的是什麼通訊協議
    四、應用層協議:MQTT和COAP對比 1. MQTT mqtt 是一個基於客戶端-伺服器的消息發布/訂閱傳輸協議。MQTT協議是輕量、簡單、開放和易於實現的,這些特點使它適用範圍非常廣泛。 是非常輕量化的通信協議,開銷很小(固定頭部2位元組),是訂閱/發布通信方式,可以一對多,多對一。是TCP通信協議。
  • TCP/IP、UDP、HTTP、MQTT、CoAP這五種物聯網協議
    其中影響最大的一個方面是通信協議。通信協議可以被認為是一種語言,即兩臺或兩臺以上的設備可以相互交流。同時無規矩不成方圓,通信協議也遵循一組規則,兩臺設備會將有意義的信息傳遞給對方。在分布式系統中通信協議極為重要,相同的協議不同的部分在多個位置獨立運行。系統在運行進程時可能是多樣化的,因此在系統中需要保證一組通用的指令來通信。
  • 天線電長度計算公式
    可能大家都知道,天線如果想要把電磁波輻射出去,那麼對天線的實際長度是有一定的要求的,那麼天線的實際長度與什麼有關呢,當然是與電磁波的頻率有關。天線的長度理論上是1/4波長或者1/2波長,可以使效率最大化。
  • 如何計算曲線長度?
    對於一條連續的、光滑的曲線,根據定積分的幾何意義,很容易計算曲線與x軸所圍成的區域的面積,但如何計算曲線的長度呢?1.直角坐標曲線曲線f(x)為一條在區間[a,b]上連續且光滑的曲線,如圖1所示。2.參數曲線如果用參數形式來描述函數曲線,則曲線長度的計算公式如圖5所示。
  • 阿壩剩餘光纜【施工剩餘】
    阿壩剩餘光纜【施工剩餘】 這就需要客戶那邊提供相應並準確的參數及技術要求。客戶初詢問的是15p工業冷水機,但經過深圳歐科隆製冷銷售與該公司技術部工程師不斷的核算及推敲,為保證生產工藝不受影響,終確定為不、LJ-40WS工業冷水機。該機組選用臺灣臺灣漢鍾壓縮機,公司殼管式冷凝器,臺灣源立水泵,法國施耐德電控系統,臺灣邦普控制面板,以及國際知名品牌冷凍配件等組成。
  • 成衣生產成本計算方法
    成衣生產成本計算方法 成衣生產成本可以從中決定售價和此成衣是否值得生產,而成本的計算會受到下列因素影響:A 公司業務性質(例如:貿易公司,製造商)B 適用的付款方式(例如:FOB,CIF)C 適用的製造條件(例如:CMT,CN)D 公司生產的成衣種類(例如:梭織品,縫接針織品
  • EPON中一種基於QoS的MAC協議設計
    2 MAC協議設計  2.1 動態帶寬分配算法  傳統的帶寬分配算法採用基於時隙的MAC協議。在這種方法中,一幀數據中分配給每個ONU的時隙與ONU的請求成比例。所有優先級的數據都被放到一個時隙中。採用這種方法,同一個ONU在不同的數據幀中,其時隙的開始時間隨著數據的突發性和數據包的長度而發生很大的變化,從而造成高優先級數據延時的抖動增加。
  • 按外皮長度計算VS按中心線長度計算,箍筋算法之爭因何產生?
    箍筋按外皮長度計算在我看來,箍筋按外皮長度計算是為了降低計算難度,因為按外皮長度計算省去了計算圓弧的麻煩。下面請看箍筋計算的演變過程。(一)箍筋按外皮計算的演變過程我們平常看到的箍筋是這樣的,比如框架柱的箍筋,如圖1所示。
  • 物理計算基本功之-長度的單位換算
    繼上期發布了《物理學習中的科學記數法》後,很多同學感到有幫助,並有部分同學表示特別害怕計算題裡面的單位換算。
  • 軟體是如何計算箍筋中心線長度的
    原創作者:張向榮上篇文章我們推導了箍筋按外皮和按中心線的計算公式,並比較了他們各自計算長度的大小,相信你對箍筋按外皮還是按中心線計算有了一定的了解,也有了自己的立場,今天的文章,給大家推導一下軟體是如何計算箍筋的中心線長度的。
  • 鈑金展開計算原理及計算方法!
    -中性層,中性層為一假想層,在彎曲過程中中性層被假想為與彎曲前狀態保持一致,即長度始終不變,所以中性層是計算彎曲件長度的基準。因此,如採用折彎機折彎,計算展開尺寸時就必須考慮折彎機的折彎方法。1.一次一道彎。此種折彎由普通通用折彎模來完成。包括折直角,鈍角和銳角(圖2)。
  • 內側小箍筋長度計算公式推導
    內側箍筋與外圍箍筋一樣,我們也分按外皮計算和按中心線計算兩種情況,下面我們先推導箍筋2、箍筋3按外皮計算情況。一、內側箍筋按外皮長度計算內側箍筋按外皮長度計算,分為豎向和橫向,下面分別計算。(一)內側豎向箍筋外皮長度計算我們先把計算圖拿過來,如圖3所示。
  • 鋼筋下料長度如何計算?三個公式一次看懂!
    首先確定彎弧內直徑D和彎鉤平直段長度(鋼筋直徑為d)。對於光圓鋼筋,末端為混凝土保護層,內徑D一般取2.5d,彎鉤平直段取3d,如下圖所示(180度半圓彎鉤):這樣就可以計算出其彎鉤增加長度為6.25d。如下圖所示:同樣的,當彎鉤角度為90度(直彎鉤)和135度(斜彎鉤)時,也可以計算出彎鉤增加長度分別為3.5d和4.5d。
  • 六角鋼管的重量計算公式及計算方法
    碳鋼/合金鋼/不鏽鋼 六角鋼管的重量計算公式 及 計算方法 說明六角鋼管的重量計算公式及計算方法×L 計算出來的重量單位是 KG碳鋼外圓內六角鋼管= 外圓棒的重量 - 內六角棒的重量設外圓的直徑為 OD (單位mm) 內六角的對邊長為 b (單位mm) 鋼管的長度為L (單位 m)則計算公式為:
  • 蓄電池剩餘容量預測技術現狀及發展
    按某一放電倍率的電流將電池進行連續放電至規定的SOC零點,放電電流與時間的乘積即為剩餘容量。放電試驗法主要用於實驗室計算電池組充電效率、檢驗SOC估算精度或者用於蓄電池的檢修,適用於所有電池。但是,該方法有兩個明顯的缺點:(1)需要大量時間和人力;(2)電池正在進行的工作不得不中斷,無法實時在線預測。
  • USS協議變頻器Web控制方法的設計方案
    本設計採用周立功公司的ZLG/IP協議棧。ZLG/IP協議棧代碼量小,是面向嵌人式系統開發的基於μC/OS-Ⅱ的小型TCP/IP協議棧,它支持TCP,UCP,IP,ICMP,ARP。 基於ZLG/IP「用戶可配置和裁剪」的特點,為了進一步提高代碼的運行速度,根據實際項目應用需要可對ZLG/IP協議棧進行裁剪。