MQTT 数据表示

213 阅读2分钟

这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战

二级制数(Bits)

字节中的0位到7位,第7位是最高有效位,第0位是最低有效位。每一位都是用0/1来表示。

Bit76543210
最高位最低位

整数数值(Integer)

整数数值是16位,使用大端序(高位字节在低位字节前面)。一味这一个16位的字在网络上表示为最高的有效字节(MSB),后面跟着最低的有效字节(LSB)。

UTF-8编码字符串

UTF-8是一个高效的Unicode字符编码格式,为了支持基文本的通信,它对ASCII字符做了优化。

每一个字符串都有一个两字节的长度字段作为前缀,表示这个字符串UTF-8编码的字节数。因此可以传输的字符串大小有限制,不能超过65535个字节。

除非另有说明,所有的UTF-8编码字符串的长度必须在[0,65535]这个范围内。

二进制位7-0
byte 1字符串长度的最高有效字节(MSB
byte 2字符串长度的最低有效字节(LSB
byte [3,n]如果长度大于0,这里是UTF-8编码的字符数据

字符串中的字符数据必须按照Unicode规范定义。

特别注意:

  • 字符数据不能包含字符码在[U+D800,U+DFFF]之间的数据。
  • 字符串不能包含空字符U+0000
  • 数据中不应该包含下面这些编码:
    • U+0001U+001F之间的控制字符
    • U+007FU+009F之间的控制字符
    • Unicode规范定义的非字符代码点(例如U+0FFFF
    • Unicode规范定义的保留字符(例如U+0FFFF

如果一个接收者(服务端或客户端)收到了包含以上无效的控制报文,它可以关闭网络连接。

UTF-8编码序列0XEF0xBB0xBF总是被解释为U+FEFF(零宽度非换行空白字符),无论它出现在字符串的什么位置,报文接收者都不能跳过或者剥离它。