【GBT32960-2016】标准解析入门(一)

完整的数据包

一个完整的数据包应由起始符、命令单元、识别码、数据加密方式、数据单元长度、数据单元和校验
码组成,数据包结构和定义见表:
在这里插入图片描述

起始符

起始符:固定为ASCII字符‘##’,用“0x23,0x23”表示


长度:距离下一个命令单元起始字节2,所以长度是2个字节
读取方式:buf.readShort()
转换16进制对比“0x23,0x23”:HexUtil.toHex(buf.readShort())

命令单元

命令单元-命令标识

命令标识应是发起方的唯一标识,代表是协议类型(业务类型)
在这里插入图片描述


长度:1个字节
读取方式:buf.readByte()
byteint:int aid = aidByte & 0xFF;int aid = (int)aidByte;
命令标识定义示例:public static final short AID_LOGIN = 0x01;

命令单元-应答标志
  • 命令的主动发起方应答标志为0xFE,表示此包为命令包;
  • 当应答标志不是0xFE时,被动接收方应不应答。
  • 当命令的被动接收方应答标志不是0xFE,此包表示为应答包。
  • 当服务端发送应答时,应变更应答标志,保留报文时间,删除其余报文内容,并重新计算校验位。

在这里插入图片描述


长度:1个字节
读取方式:buf.readByte()
byteint:int mid = midByte & 0xFF;int mid = (int)midByte;
应答标志作用:用于判断是否需要应答协议

唯一识别码

当传输车辆数据时,应使用车辆VIN,其字码应符合GB16735 的规定。
如传输其他数据,则使用唯一自定义编码。


长度:距离下一个命令单元起始字节21,所以长度是21-4=17个字节(初学者根据协议计算长度),但其实车架号固定长度就是17
读取方式:
byte[] vinBytes = new byte[17];
buf.readBytes(vinBytes);
String vin = new String(vinBytes, Charset.forName("utf-8"));

数据单元加密方式

  • 0x01:数据不加密;
  • 0x02:数据经过RSA 算法加密;
  • 0x03:数据经过AES128 位算法加密;
  • 0xFE:表示异常,
  • 0xFF:表示无效,其他预留。
长度:1个字节
读取方式:
读取方式:buf.readByte()
byteint:int securityType = securityTypeByte & 0xFF;int securityType = (int)securityTypeByte;
/**
0x01:数据不加密
*/
public static final int SECURE_NONE = 0x01;
/**
0x02:数据经过RSA算法加密
*/
public static final int SECURE_RSA = 0x02;
/**
0x03数据经过AES128位算法加密
*/
public static final int SECURE_AES = 0x03;
if (securityType == SECURE_RSA) {
} else if (securityType == SECURE_RSA) {
}

数据单元长度

数据单元长度是数据单元的总字节数,有效值范围:0~65531。

长度:2个字节
读取方式:buf.readShort()
short占两个字节,且数据单元长度正好是int,可以直接用readShort()读取

数据单元

每条命令标识数据集不同,详看数据单元格式及定义

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值