呵呵,这个东西困扰了几天,今天又发现一个BUG,查询资料的过程中遇到的都是项目推广的东西,没几篇帖子认真的仔细的说说怎么来解析,好不容易弄出来了,发出来大家参考一下!!! 只是简单的模拟一下解析的过程,如果你还需要更为详细的GPS框架实现,可能你还要多查查资料了。。。 假定模块发送的数据是:
byte tmpBytes = new byte[] { 0x7E, 0x02, 0x00, 0x00, 0x3C, 0x01, 0x56, 0x09, 0x52, 0x25, 0x04, 0x3C, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0xC3, 0x02, 0x49, 0x8B, 0x68, 0x06, 0x52, 0xBC, 0xF0, 0x04, 0x65, 0x00, 0x00, 0x00, 0xAA, 0x16, 0x08, 0x20, 0x16, 0x27, 0x18, 0x01, 0x04, 0x00, 0x03, 0x07, 0xBC, 0x02, 0x02, 0x01, 0x32, 0x03, 0x02, 0x00, 0x00, 0x25, 0x04, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x30, 0x01, 0x18, 0x31, 0x01, 0x08, 0x57, 0x7E }; 然后服务端收到的数据转为字符后结果如下(此过程转换方法见方法1): 7E0200003C0156095225043C7800000000000C00C302498B680652BCF00465000000AA1608201627180104000307BC02020132030200002504000000002B0400000000300118310108577E
然后在解析过程中需要参考JT808协议,这个网上有相应的pdf文件,http://www.jt808.com/?p=893 可以参考这个,通过这个说说附加属性的解析过程:
也就是上方数据的这一部分: 0104000307BC02020132030200002504000000002B0400000000300118310108577E
类似于 经纬度、速度等参考协议文档就可以看明白了,难点在附加参数这里,有一些误区: 相对里程: ID 01 附加长度04 即相对应的值长度为4 值:00 03 07 BC(解析的值是这一部分 前面的都是定格式的参数) 注意这是DWORD ToInt32
油耗: ID 02 附加长度 02 相对于的值长度为2 值:01 32 注意这是WORD 转的时候转为Toint16 结果为306
转的时候注意是通过Byte数组转 直接通过“0132”的字符串肯定是错误的
附:方法1 public static string 方法1(byte[] bytes) { string result = ""; if (bytes != null) { for (int i = 0; i < bytes.Length; i++) { result += bytes[i].ToString("X2"); } } return result; }
上图的资源来源于http://www.jt808.com/?p=893 这里,感谢,大家也可以参考这里的相关资料