串口通讯(含协议)支持粘包分包解析数据

数据格式

0xAA,0xBB,0xCC,0x01,0x00,0x06,0x00,0x00,0x00,0x00,0xEF,0xFF

头部 0xAA,0xBB,0xCC
数据类型(1文本,2二进制) 0x01
数据长度 0x00,0x06
分包预留 0x00
数据内容 0x00,0x00,0x00
校验位动态计算 0xEF(0x00,0x06,0x00,0x00,0x00,0x00) 校验和
结束位0xFF

https://github.com/INTKILOW/SerialApi

 
```java

import android.util.Log;

public class DataHelper {
    private final byte[] header = {(byte) 0xAA, (byte) 0xBB, (byte) 0xCC};
    private final byte[] footer = {(byte) 0xFF};//未校验

    private byte[] data = null;//数据

    private byte[] buff = null;//缓冲区

    private int dataLen; //数据内容区长度
    private int position = 0;//当前下标位置 第一个合法的头部数据位置
    private int hL = header.length; //头的长度 3
    private CallBack callBack;//解析成功回调

    private boolean stop = true;

    private boolean isCompress = true;//是不是需要新协议

    public void onDestroy(){
        stop = false;
    }
    public DataHelper(){}
    public DataHelper(boolean isCompress){
        this.isCompress = isCompress;

    }



    /**
     * @param bt 0xAA,0xBB,0xCC   0x01,               --0x00,0x06,      0x00,   0x00,0x00,0x00,--  0xEF,        0xFF
     *           <p>
     *           头部             数据类型(1文本,2二进制) 数据长度(--xxxx--) 分包预留  数据内容             校验位动态计算 结束位
     */
    public void parseData(byte[] bt) {
        if(!isCompress){
            callBack.call(new String(bt),true);
            return;
        }
        if (bt == null || bt.length <= 0) return;
        this.data = bt;

        /**
         * 判断缓冲区里面是否有数据 添加到当前数据
         */
        if (buff != nul
  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值