序号 内容                           字节数                        备注
1 指令代码(0003H)           1  
2 终端ID低16位                   2  
3 终端ID高16位                   2  
4 时间:年-月                           2  
5 时间:日-时                           2  
6 时间:分-秒                           2  
7 寄存器起始地址                      2  
8 寄存器数(N3)                   1                            N3=实际上传的寄存器数减一
9 寄存器值                           2*(N3+1)  
10 CRC校验                           2  
------ -以上为编码规则----------------------------------------------------------下面是设备给我发来的数据编码:AA7200031500FFFF000000001032000203000088011A0E17000000请问我如何解析这个编码得到上面对应的数据?给个思路。不胜感激!谢谢

解决方案 »

  1.   

    序号 内容                           字节数                        备注
    1 指令代码(0003H)           1  
    2 终端ID低16位                   2  
    3 终端ID高16位                   2  
    4 时间:年-月                           2  
    5 时间:日-时                           2  
    6 时间:分-秒                           2  
    7 寄存器起始地址                      2  
    8 寄存器数(N3)                   1                            N3=实际上传的寄存器数减一
    9 寄存器值                           2*(N3+1)  
    10 CRC校验                           2  
    ------ -以上为编码规则----------------------------------------------------------下面是设备给我发来的数据编码:AA7200031500FFFF000000001032000203000088011A0E17000000翻译后是这样的:
    1 指令代码(0003H)     2 终端ID低16位              3 终端ID高16位            ……………………
    AA                                    72 00                                03 15                         00FFFF000000001032000203000088011A0E17000000能看明白不?
      

  2.   

    标准的BCD码是保持10进制和16进制阅读一致,如 12 (10进制)的BCD码为 0x12(即10进制的18);
    在实际中经常被误用为<100的10进制占用一个字节,即还是16进制表示,但每个字节表示2位10进制数字,如12(10进制)=> 0C(16进制),99(10进制)=> 0x63(16进制);>=100不允许。
    年月日时分秒多用BCD码表示,从16进制字符串即可直接读出 日期时间,方便调试。
      

  3.   

    如2017年12月4日 12点36分18秒 => 20 17 12 04 12 36 18,其十进制的数字序列是(32 23 18 4 18 54 24),FYI