zoukankan      html  css  js  c++  java
  • 编码 | 二进制格式设计方案

    二进制命令定长和不定长区分

    不定长格式

    以Ublox模块的UBX协议为例,如下图:
    avatar

    该协议的优点

    • 紧凑-使用8位二进制数据;
    • 受保护的校验和-使用开销较低的校验和算法;
    • 模块化-使用两阶段消息标识符(类和消息ID);
    • 支持自定义字段扩展。

    如上图 Payload 规定:

    • 无特殊说明的情况下,一律按小端模式进行存储;
    • 针对2字节长度的字段,必须从偏移地址为2的倍数的地方开始存储,至于4个字节长度的字段,必须从偏移地址为4的倍数的地方开始存储
    • 保留字段中,作为输出语句,保留字段可以不关心,但是保留字段作为输入语句,保留字段必须进行清零操作
    • 单双精度浮点数按照IEEE754标准进行存储。

    校验(如上图):

    CK_A = 0, CK_B = 0
    For(I=0;I<N;I++)
    {
        CK_A = CK_A + Buffer[I]
        CK_B = CK_B + CK_A
    }
    

    定长格式

    以下格式为一个参考设计demo
    avatar
    该协议长度固定,有固定的协议头,每个数据字段的相对位置是固定的。
    协议格式优点:

    • 协议长度及字段位置为固定的,方便用户解析
    • 协议头确定,根据协议头进行区分,更加直观

    协议格式缺点:

    • 非常不利于字段的扩展。
  • 相关阅读:
    【git hub使用】
    【struct2 第一天】
    【JSP基础 第一天】
    【Java基础学习 day01】
    网站建设 【Django】 【MTV】
    Python-Json字符串和XML解析
    Python-冒泡和快排
    Python-面向对象编程
    练习-字符串编码
    练习-统计文件中单词数量
  • 原文地址:https://www.cnblogs.com/CristL/p/14110298.html
Copyright © 2011-2022 走看看