跳至主要內容

协议格式说明

hylexus大约 2 分钟示例Quick-Start编码解码JT/T 808

协议格式说明

请先读我

请先读我

  • 本示例是对 交通部 JT/T 808 协议 - V2019 的解析示例
  • 交通部 JT/T 808 协议 的消息类型有很多
    • 同时有 2011(废弃)20132019 版本,本示例仅仅展示 V2019 版本的 0x0200(地理位置) 消息类型的解析示例
    • 而且还有各个地方标准的扩展
  • 示例1 一样,本示例将演示 3 种风格的注解使用示例:
    • Rust 命名风格的注解
    • JT/T 808 协议 命名风格的注解
    • 最底层的 @XtreamField 风格注解(实际上前两种注解都是 @XtreamField 的别名)
  • 同时也会分为 扁平化内嵌 两种方式的注解使用示例:也就是 3 * 2 = 6 个 基于注解的实体类示例

消息结构

标识位消息头消息体校验码标识位
1byte(0x7e)16byte不同消息 ID 有不同格式1byte1byte(0x7e)

消息头

  • 非分包消息 的消息头长度为 17字节
  • 分包消息 的消息头长度为 21字节

消息头的结构如下所示:

消息ID[0-2)	消息体属性[2-4)	协议版本号[4]   终端手机号[5-15)	消息流水号[15-17)	消息包封装项[17-21)

byte[0-2) 	消息ID word(16)
byte[2-4) 	消息体属性 word(16)
		bit[0-10)	消息体长度
		bit[10-13)	数据加密方式
						此三位都为 0,表示消息体不加密
						第 10 位为 1,表示消息体经过 RSA 算法加密
						其它保留
		bit[13]		分包
						1: 消息体卫长消息,进行分包发送处理,具体分包信息由消息包封装项决定
						0: 则消息头中无消息包封装项字段
		bit[14]	    版本标识
		bit[15]	保留
byte[4]     协议版本号
byte[5-15) 	终端手机号或设备ID bcd[10]
		根据安装后终端自身的手机号转换
		手机号不足12 位,则在前面补 0
byte[15-17) 	消息流水号 word(16)
		按发送顺序从 0 开始循环累加
byte[17-21) 	消息包封装项
        如果消息体属性中相关标识位确定消息分包处理,则该项有内容
		否则无该项
		byte[0-2)	消息包总数(word(16)) 该消息分包后得总包数
		byte[2-4)	包序号(word(16))1 开始

消息体

交通部 JT/T 808 协议 里有 N 种消息类型,消息ID 不同对应的消息体也不同,同时还有各种扩展消息,本示例仅展示 0x0200(地理位置) 消息类型的解析示例。

0x0200 消息的消息体如下图所示:

编解码