当前位置: 首页 > wzjs >正文

六安住房和城乡建设部网站绍兴seo网站管理

六安住房和城乡建设部网站,绍兴seo网站管理,专做海岛游的网站,网上书城网站开发背景文章目录 一、消息头 数据1、消息头拼接2、消息 ID 字段3、消息体属性 字段4、终端手机号 字段5、终端流水号 字段 二、消息体 数据三、校验码计算四、最终计算结果五、终端注册应答1、分解终端应答数据2、终端应答 消息体 数据 六、字符编码转换网站 一、消息头 数据 1、消息头…

文章目录

  • 一、消息头 数据
    • 1、消息头拼接
    • 2、消息 ID 字段
    • 3、消息体属性 字段
    • 4、终端手机号 字段
    • 5、终端流水号 字段
  • 二、消息体 数据
  • 三、校验码计算
  • 四、最终计算结果
  • 五、终端注册应答
    • 1、分解终端应答数据
    • 2、终端应答 消息体 数据
  • 六、字符编码转换网站





一、消息头 数据




1、消息头拼接


808 协议的消息头结构如下 :

+----------+-------------+----------------+--------+------------+----------------+
| 消息ID   | 消息体属性   | 终端手机号      | 流水号 | 总包数     | 包序号         |
| 2字节    | 2字节       | 6字节(BCD)     | 2字节  | 2字节(可选)| 2字节(可选)    |
+----------+-------------+----------------+--------+------------+----------------+

这是生成的 终端注册 消息头数据 :

消息头数据 :

01 00 00 36 01 85 11 88 88 88 00 01

参考 下图进行解析 :

在这里插入图片描述


2、消息 ID 字段


0 ~ 1 字节 是消息 ID , " 01 00 00 36 01 85 11 88 88 88 00 01 "

0x0100 是 终端注册的 消息 ID ;

在这里插入图片描述


3、消息体属性 字段


2 ~ 3 字节 是消息体属性 , " 01 00 00 36 01 85 11 88 88 88 00 01 " , 也就是 00 36 ,

将其拆解成二进制形式 为

0000 0000 0011 0110

参考下面的 位数 进行对应 ,

保留位 是 00 , 分包位 是 0 , 数据加密方式是 000 ,

消息体长度是 00 0011 0110 , 对应的十六进制为 0x36 , 十进制为 54 , 消息体长度 54 字节 ;

在这里插入图片描述


4、终端手机号 字段


4 ~ 9 字节 是 终端手机号 , " 01 00 00 36 01 85 11 88 88 88 00 01 " , 也就是 18511888888 十一位手机号 , 前面加上一个 0 ;

这是 BCD 编码 , 每个字节 高四位 表示一个数字 , 第四位表示一个数字 ;

使用 如下代码 , 可以实现 BCD 编码 到 数字字符串 之间的转换 ;

    /*** 读入数据时通过按位与操作将bcd编码转换成设备编号devId** @param bcd* @return*/public static String bcdToString(byte[] bcd) {// 存储转码后的字符串StringBuilder sb = new StringBuilder();// 循环数组解码 先将每个位上的for (int i = 0; i < bcd.length; i++) {// 转换低字节 十六进制的  0x0f 等于十进制的 15,二进制表示为00001111,直接取到低4位int low = (bcd[i] & 0x0f);// 转换高字节 十六进制的  0xf0 等于十进制的 240,二进制表示为11110000,右移4位的意思是取高4位int high = ((bcd[i] & 0xf0) >> 4);// 如果高字节等于0xf(二进制1111)说明是补的字节,直接抛掉if (high != 0xf) {sb.append(high);}sb.append(low);}// 返回解码字符串return sb.toString();}/*** 写出数据时将我们业务中的devId转换成bcd编码** @param bcd* @return*/public static byte[] strToBcd(String bcd) {// 获取字节数组长度int size = bcd.length() / 2;int remainder = bcd.length() % 2;// 存储BCD码字节byte[] bcdByte = new byte[size + remainder];// 转BCD码for (int i = 0; i < size; i++) {int high = Integer.parseInt(bcd.substring(2 * i, 2 * i + 1));int low = Integer.parseInt(bcd.substring(2 * i + 1, 2 * i + 2));bcdByte[i] = (byte) ((high << 4) | low);}// 如果存在余数,需要填Fif (remainder > 0) {int low = Integer.parseInt(bcd.substring(bcd.length() - 1));bcdByte[bcdByte.length - 1] = (byte) ((0xf << 4) | low);}// 返回BCD码字节数组return bcdByte;}

5、终端流水号 字段


10 ~ 11 字节 是 终端流水号 , " 00 00 00 36 01 85 11 88 88 88 00 01 " ,

终端流水号 , 每次发送数据后 , 自增 1 ;





二、消息体 数据



终端注册 消息体 数据如下 :

0000 - 0015: 00 00 00 00 42 59 44 00 00 32 00 00 00 00 00 00    ....BYD..2......
0016 - 0031: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0032 - 0047: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0048 - 0063: 00 00 00 00 00 00                                  ......

参考下图进行解析 :

在这里插入图片描述

  • 0 ~ 1 字节 : 是 省域 ID , short 双字节整型 , 下面 蓝色部分是 省域 ID 数据 ;

    0000 - 0015: 00 00 00 00 42 59 44 00 00 32 00 00 00 00 00 00 …BYD…2…
    0016 - 0031: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
    0032 - 0047: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
    0048 - 0063: 00 00 00 00 00 00 …

  • 2 ~ 3 字节 : 市县域 ID , short 整型 , 下面蓝色部分对应数据 ;

    0000 - 0015: 00 00 00 00 42 59 44 00 00 32 00 00 00 00 00 00 …BYD…2…
    0016 - 0031: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
    0032 - 0047: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
    0048 - 0063: 00 00 00 00 00 00

  • 4 ~ 8 字节 : 5 字节数据 , 制造商编码 , 下面蓝色部分是 " BYD " 字符串对应的 ASCII 码 , 后面是 两个 0 ;

    0000 - 0015: 00 00 00 00 42 59 44 00 00 32 00 00 00 00 00 00 …BYD…2…
    0016 - 0031: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
    0032 - 0047: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
    0048 - 0063: 00 00 00 00 00 00

  • 9 ~ 28 字节 : 20 字节的数据 , 终端型号 , 字符 2 对应的 ASCII 码 ; 下面蓝色字体部分 ;

    0000 - 0015: 00 00 00 00 42 59 44 00 00 32 00 00 00 00 00 00 …BYD…2…
    0016 - 0031: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
    0032 - 0047: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
    0048 - 0063: 00 00 00 00 00 00

  • 29 ~ 35 字节 : 7 字节的 二进制数据 , 这里设置的是 0 ;

    0000 - 0015: 00 00 00 00 42 59 44 00 00 32 00 00 00 00 00 00 …BYD…2…
    0016 - 0031: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    0032 - 0047: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
    0048 - 0063: 00 00 00 00 00 00

  • 36 ~ 36 字节 : 1 字节的 二进制数据 , 颜色代码 ;

    0000 - 0015: 00 00 00 00 42 59 44 00 00 32 00 00 00 00 00 00 …BYD…2…
    0016 - 0031: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
    0032 - 0047: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
    0048 - 0063: 00 00 00 00 00 00

  • 37 ~ 53 字节 : 17 字节的 二进制数据 , VIN 码 , 车架号 , 这里设置默认 0 ;

    0000 - 0015: 00 00 00 00 42 59 44 00 00 32 00 00 00 00 00 00 …BYD…2…
    0016 - 0031: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
    0032 - 0047: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    0048 - 0063: 00 00 00 00 00 00





三、校验码计算



终端注册

  • 消息头 :
	0000 - 0015: 01 00 00 36 01 85 11 88 88 88 00 01
  • 消息体 :
	0000 - 0015: 00 00 00 00 42 59 44 00 00 32 00 00 00 00 00 00    ....BYD..2......0016 - 0031: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................0032 - 0047: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................0048 - 0063: 00 00 00 00 00 00                                  ......                                  ....~
  • 校验位 :
	0000 - 0015: E4

将 消息头 + 消息体 两个字节数组 合并后 进行校验 , 使用如下函数 从第一字节开始 进行校验 直到最后一位 ,

    /*** 校验位 校验码指从消息头开始,同后一字节异或,直到校验码前一个字节,占用一个字节。** @return*/public static byte crc(ByteBuf byteBuf) {ByteBuf buf = byteBuf.copy();byte checksum = 0;while (buf.readableBytes() > 0) {checksum ^= buf.readUnsignedByte();}return checksum;}




四、最终计算结果



将上述 消息头 + 消息体 + 校验位 拼装起来 ,

查看 数据中是否有 0x7e 和 0x7d , 进行转义替换 ;

出现 0x7e 的转义处理 : 0x7e <————> 0x7d 后紧跟一个 0x02;
出现 0x7d 的转义处理 : 0x7d <————> 0x7d 后紧跟一个 0x01。


最终的 终端注册数据包为 :

	0000 - 0015: 01 00 00 36 01 85 11 88 88 88 00 01 00 00 00 00    ~...6.6.........0016 - 0031: 00 42 59 44 00 00 32 00 00 00 00 00 00 00 00 00    .BYD..2.........0032 - 0047: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................0048 - 0063: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................0064 - 0079: 00 00 00 E4 7E                                     ....~




五、终端注册应答



返回 终端注册应答 数据 :

	0000 - 0015: 7E 81 00 00 10 01 36 00 10 10 89 00 02 00 01 00    ~.....6.........0016 - 0031: BB CE CE D6 88 E2 47 AC BB 21 30 CE 39 48 7E       ..........089H~

1、分解终端应答数据


前后的 0x7E 是 标识位 ;

倒数第二位 0x48 是 校验位 ;

消息头的结构 :

+----------+-------------+----------------+--------+------------+----------------+
| 消息ID   | 消息体属性   | 终端手机号      | 流水号 | 总包数     | 包序号         |
| 2字节    | 2字节       | 6字节(BCD)     | 2字节  | 2字节(可选)| 2字节(可选)    |
+----------+-------------+----------------+--------+------------+----------------+

消息头提取出来 :

81 00 00 10 01 36 00 10 10 89 00 02

消息体数据提取出来 :

00 01 00 BB CE CE D6 88 E2 47 AC BB 21 30 CE 39 48 7E

参考下图进行解析 ;

在这里插入图片描述


2、终端应答 消息体 数据


消息体数据 :

00 01 00 BB CE CE D6 88 E2 47 AC BB 21 30 CE 39 48 7E

在这里插入图片描述

  • 00 01 是 应答 流水号 ;
  • 00 表示 终端注册 成功 ;
  • BB CE CE D6 88 E2 47 AC BB 21 30 CE 39 是 鉴权码 字符串对应的 二进制数据 ;




六、字符编码转换网站



字符编码转换网站 :

  • GBK 编码转换
  • UTF-8 编码转换
  • URL 编码转换
http://www.dtcms.com/wzjs/447868.html

相关文章:

  • 新余网站开发公司论文收录网站有哪些
  • 黑龙省建设厅网站seo属于运营还是技术
  • 手机端网站制作教程桂林市天气预报
  • wordpress附件链接seo兼职招聘
  • 怎么查看一个网站是哪家公司做的策划方案模板
  • 中山网站建设找阿江ps培训
  • 济南seo排名搜索网站优化推广培训
  • 电商网页设计理念优化大师官方下载
  • 帮人做logo网站色盲怎么治疗
  • 网站模板整站百度2023免费下载
  • 北京高端网站建设规划中国十大品牌策划公司
  • 网站构造下拉列表怎么做负面口碑营销案例
  • 网站违法和做网站得有关系网络推广平台软件app
  • 住房与城乡建设管理委员会网站巢湖seo推广
  • 北海住房和城乡建设部网站营销策划方案
  • 常州建设局职称网站热门搜索排行榜
  • 长沙个人做网站排名青岛seo百科
  • 潍坊网站定制联盟营销平台
  • 重庆建筑信息工程官网东莞seo优化推广
  • 网站备案 公章百度推广页面投放
  • 静态网站是什么样西安自助建站
  • 学校网站设计思路外贸电商平台哪个网站最好
  • 商丘做网站青岛百度快速排名优化
  • 自带代理的浏览器厦门seo俱乐部
  • 中小微企业建设网站北京网络seo经理
  • 拍摄企业宣传片公司哪家好湖南seo技术培训
  • 成都网站建设四易维达十个有创意的线上活动
  • 网站后台界面设计十大短视频平台排行榜
  • 贵州建设学校网站百度免费收录提交入口
  • 山西做网站怎么创造自己的网站