MQTT協議剩餘長度計算方法

2020-12-10 腦洞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

相關焦點

  • 記一次MQTT協議壓測
    因為直播信令是基於MQTT協議,每個學生端都會訂閱同樣的topic,所以學生端也會收到其他學生端的進入教室和退出教室信令.我們基於上面的問題,需要對客戶端進行壓測,看一個客戶端需要收到多少QPS的情況下不會ANR.我們日常工作中很少會壓測MQTT,基本上都是HTTP協議,本次也是記錄一些學習過程.什麼是信令?
  • MicroPython使用MQTT協議接入OneNET雲平臺
    之前使用Arduino+ESP8266使用EDP協議成功接入了OneNET,實現了物聯網控制,本次使用板載ESP8266的ESP-MP-01 MicroPython開發板使用MQTT協議同樣成功接入,通過發布TOPIC成功實現智能設備控制。
  • 鴻蒙MQTT協議開發入門
    ),是一種基於發布/訂閱(publish/subscribe)模式的"輕量級"通訊協議,該協議構建於TCP/IP協議上,由IBM在1999年發布。(5)小型傳輸,開銷很小(固定長度的頭部是2位元組),協議交換最小化,以降低網絡流量。這就是為什麼在介紹裡說它非常適合"在物聯網領域,傳感器與伺服器的通信,信息的收集",要知道嵌入式設備的運算能力和帶寬都相對薄弱,使用這種協議來傳遞消息再適合不過了。(6)使用Last Will和Testament特性通知有關各方客戶端異常中斷的機制。
  • 迅為迅為iTOP-i.MX6ULL 開發板-Mqtt 移植教程
    MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議,是一種基於發布/訂閱 (publish/subscribe)模式的輕量級協議,該協議構建於 TCP/IP 協議之上,
  • MQTT 教程詳解(入門篇)
    再再比如基於 XMPP 協議的消息推送 ,這是一種基於 XML 的協議,它繼承了在XML環境中靈活的發展性。這個協議成熟、強大、可擴展性強、目前主要應用於許多聊天系統中,且已有開源的 Java 版的開發實例 androidpn。但是該協議較複雜、冗餘(基於XML)、費流量、費電,部署硬體成本高。
  • 【零基礎學物聯網】MQTT篇 1-6 ESP8266發布MQTT消息
    #include <ESP8266WiFi.h>#include <PubSubClient.h>#include <Ticker.h> const char* ssid = "taichi-maker";const char* password = "12345678";const char* mqttServer
  • STM32+W5500+MQTT+Android實現遠程數據採集及控制
    1 單片機端實現MQTT協議是基於TCP的協議,所以我們只需要在單片機端實現TCP客戶端代碼之後就很容易移植MQTT了,STM32F4+W5500實現TCP客戶端的代碼我們以前已經實現過,代碼下載地址為:http://www.embed-net.com/thread-87-1-1.html當然,如果你想在代碼裡面直接使用伺服器域名方式進行連接,我們還得在TCP客戶端代碼裡面集成
  • 二次剩餘——第一個零知識證明協議的歷史背景與證明方法|火星技術帖
    小編:記得關注哦來源:安比實驗室SECBIT原文標題:三分鐘了解第一個零知識證明協議的歷史背景與證明方法完整介紹了第一個零知識證明協議的背景知識、構造以及證明。第一個正式的零知識證明協議是二次剩餘 (Quadratic Residue) 的判定,通過它,我們介紹零知識證明中的工具——計算不可區分(computationally indistinguable) 和模擬範式(simulation paradigm),並且給出必要的證明。
  • 物聯網應用層協議選擇和分析--MQTT、CoAP 、HTTP、XMPP、SoAP
    MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)最早是IBM開發的一個即時通訊協議,MQTT協議是為大量計算能力有限且工作在低帶寬、不可靠網絡的遠程傳感器和控制設備通訊而設計的一種協議。
  • IoT 輕量級協議(4)| MQTT 控制報文結構和主題名
    上期我們學習了 MQTT 協議介紹與業務流程,今天來看看 MQTT 控制報文結構和主題名。
  • 計算線段長度的方法技巧
    同學對於線段的計算感到有點摸不著頭緒。這是介紹幾個計算方法,供同學們參考。 1. 利用幾何的直觀性,尋找所求量與已知量的關係 例1. 如圖1所示,點C分線段AB為5:7,點D分線段AB為5:11,若CD=10cm,求AB。
  • 如何根據布基膠帶直徑計算長度?
    如何根據布基膠帶直徑計算出布基膠帶的長度?不多說了,趕緊上車,學霸小編教你怎麼計算。泡棉雙面膠方法一:1、先用尺子測量一下布基膠帶的紙管內徑長度,5、最後,在依據公式:L長度=3.1415926×((W膠帶外徑直徑/2) ×(W膠帶外徑直徑/2)-(N膠帶內徑直徑/2+H) ×(N膠帶內徑直徑/2+H管芯紙管厚度)/T膠帶厚度/1000,根據這個公式,來計算布基膠帶的長度。
  • 物聯網架構各個層次使用的是什麼通訊協議
    四、應用層協議:MQTT和COAP對比 1. MQTT mqtt 是一個基於客戶端-伺服器的消息發布/訂閱傳輸協議。MQTT協議是輕量、簡單、開放和易於實現的,這些特點使它適用範圍非常廣泛。 是非常輕量化的通信協議,開銷很小(固定頭部2位元組),是訂閱/發布通信方式,可以一對多,多對一。是TCP通信協議。
  • 天線電長度計算公式
    可能大家都知道,天線如果想要把電磁波輻射出去,那麼對天線的實際長度是有一定的要求的,那麼天線的實際長度與什麼有關呢,當然是與電磁波的頻率有關。天線的長度理論上是1/4波長或者1/2波長,可以使效率最大化。
  • Python中如何計算字符串的長度
    第七十二節:計算字符串長度在學習計算字符串的長度之前,需要先了解一個概念:字符編碼。在Python中,提供了一個len()函數來計算字符串的長度,它的語法格式是這樣的:len(string)而且它的用法非常的簡單,還是以「人生苦短,我用Python!」為例,來計算一下這個字符串的長度,詳見下圖:
  • 如何計算曲線長度?
    對於一條連續的、光滑的曲線,根據定積分的幾何意義,很容易計算曲線與x軸所圍成的區域的面積,但如何計算曲線的長度呢?1.直角坐標曲線曲線f(x)為一條在區間[a,b]上連續且光滑的曲線,如圖1所示。根據微分的思想,一段曲線的長度可以分割成無數條短曲線的和。現在假設用n-1個數將區間[a,b]分割成n個子區間。根據圖1可知,每個子區間的弧長可以近似用圖2的式子來表示。
  • MQTT協議是什麼?有什麼技術優勢?|伺服器|物聯網|mqtt|dtu|應用層...
    MQTT  (消息隊列遙測傳輸)是ISO標準(ISO/IECPRF20922)下基於發布/訂閱範式的消息協議。它是為硬體連接網絡不可靠的情況下所專門設計的一種輕量、簡單、開放的訂閱式數據傳輸協議。MQTT是基於TCP協議的應用層傳輸協議。
  • ARM處理器NEON編程及優化技巧——處理剩餘的元素
    關鍵字: ARM NEON Cortex-A8 cache 對齊本文引用地址:http://www.eepw.com.cn/article/201611/317425.htm剩餘的元素Leftovers通常NEON會向量處理從4個到16個元素長度的數據,如果你發現你的數組不是這個這個長度的整數倍,你就需要單獨處理那些剩下來的幾個元素。
  • 七年級上學期,線段長度的計算方法(上),從簡單題到難題的突破
    在幾何圖形的初步認識中,計算線段的長度與角的度數是基本要求,但也變化多端,各種思想在解題的過程中得以體現。不要小瞧最後一章,在期末考試中佔的分量可不算小,能與前面的數軸結合在一起考察動點問題。1.直接計算(基本計算)利用線段之間的和差關係,或倍數關係、中點關係等直接計算線段的長度。例題1:如圖,延長AB至D,使B為AD的中點,點C在BD上,CD=2BC.若BC=3,求AD的長。
  • 訂閱標識符與訂閱選項 - MQTT 5.0 新特性
    到目前為止,我們已經探討過這些 MQTT v5 新特性 (https://www.emqx.io/cn/mqtt/mqtt5) ,今天我們將繼續討論:訂閱標識符 和 訂閱選項。客戶端可以在訂閱時指定一個訂閱標識符,服務端將在訂閱成功創建或修改時建立並存儲該訂閱與訂閱標識符的映射關係。