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
    该协议长度固定,有固定的协议头,每个数据字段的相对位置是固定的。
    协议格式优点:

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

    协议格式缺点:

    • 非常不利于字段的扩展。
  • 相关阅读:
    UVA 10970-Big Chocolate
    HUAS Summer Trainning #3 L
    HUAS Summer Trainning #3 K
    HUAS Summer Trainning #3 E
    HUAS Summer Trainning #3 C
    HUAS Summer Trainning #3 B
    HUAS Summer Trainning #3 A
    2015 HUAS Summer Training#2 G
    2015 HUAS Summer Training#2 F
    2015 HUAS Summer Training#2 E
  • 原文地址:https://www.cnblogs.com/CristL/p/14110298.html
Copyright © 2011-2022 走看看