起始字节           字段                          数据类型                     描述及要求
0                  消息ID + 厂家ID              WORD                       前2位1--80为消息ID;后3位1--999为厂家ID
2                 设备编号+流水号            DWORD                     前4位1--5000为设备编号;后6位1--999999为流水号
6                 消息体数据长度              WORD                         红色的那个描述看起来似乎是10进制数值?

解决方案 »

  1.   

    文档定义的不严谨,他应该是将整型数转换成10进制数字字符串。题外话,从通讯协议角度,如果是网络通信,校验字节也没必要。IP包以及之上的tcp、udp本身就是正确包。当然,人家这么定义,你只好按要求实现。
      

  2.   

    目测他的意思是将word转为字节,如一个word数据为80,然后转为2个字节的byte进行通讯,他的前两位是指前两个字节
      

  3.   

    谁定义的结构体,会把人看傻的!
    开了几分钟还是没看明白...起始字节           字段                          数据类型                     描述及要求
    0                  消息ID + 厂家ID              WORD                       前2位1--80为消息ID;后3位1--999为厂家ID
    2                 设备编号+流水号            DWORD                     前4位1--5000为设备编号;后6位1--999999为流水号
    6                 消息体数据长度              WORD你无论按10进制取位也不对,按2进制取位也不对WORD 1~65535,如果按10进制取位,则前2位最高只有65,后3位只有535,根本不可能达到要求
    DWORD 1~4294967295,前4位最高只有4294,后6位只有967295
    如果按2进制取位就更加没可能了,2位最高只能表示3、3位最高只能表示7、4位最高表示15、6位最高63做程序一般都要按理论最高数据测试,写这结构体的人有没有做过峰值测试?
    如果按照定义,当数据达到理论最高缝制,则第一个成员 80999 ,第二个成员 5000999999
    系统一般会将数值自动截断然后赋值,那不出错就有鬼了当然如果我理解错或者最高值永远不会达到定义中所说的值的话就另当别论了~至于你想用结构体来表示,看消息头及校验码的定义,没有考虑字节对齐
    消息头中已有一个“消息体数据长度”的定义了,结束符就可以省略了
    由于消息体是可变长数据,那么结构体就不会有一个明确的定义,只有一个除消息体以外的结构struct XXXX {
        WORD w1;
        DWORD dw1;
        WORD w2;
        BYTE byte1;
        char data[1];
    };
      

  4.   

    " 消息ID + 厂家ID              WORD  " 可以这样:
    取高6位表示 0  -   63        加低位余数可以表示 0-86 (还多6)! 
    取低10位表示0-1023        减1000  的余数加到 高6位.
    共可以表示    0-1086