Android 串口数据分包处理

news/2025/1/15 14:39:20/

/*
class PacketHandler {
private static final byte PACKET_START = 0x79; // 假设包的开始标记为0x79
private static final byte PACKET_END = 0x0D; // 假设包的结束标记为0x0D

private static ByteArrayOutputStream buffer = new ByteArrayOutputStream();public static void onDataReceived(byte[] data) {buffer.write(data, 0, data.length);byte[] completePacket = null;while ((completePacket = findNextPacket(buffer.toByteArray())) != null) {// 处理完整的包processPacket(completePacket);// 从缓冲区中移除已处理的包removeProcessedPacket(buffer, completePacket);}
}private static byte[] findNextPacket(byte[] data) {int startIndex = -1;for (int i = 0; i < data.length; i++) {if (data[i] == PACKET_START) {startIndex = i;break;}}if (startIndex >= 0) {int endIndex = -1;for (int i = startIndex; i < data.length; i++) {if (data[i] == PACKET_END) {endIndex = i;break;}}if (endIndex > startIndex) {return Arrays.copyOfRange(data, startIndex, endIndex + 1);}}return null;
}static StringBuffer stringBuffer = new StringBuffer();
static boolean isComnplete;private static void processPacket(byte[] packet) {// 处理包的逻辑String s = MyFunc.ByteArrToNoSpaceHex(packet);stringBuffer.append(s);try {

// Log.i(“byteDataResult”, stringBuffer.toString() + “=111=” + fromHexString(stringBuffer.toString()));
} catch (Exception e) {
e.printStackTrace();
}

    if (stringBuffer != null && stringBuffer.toString().endsWith("23796F6E6B65720D")) {String dateTemp = stringBuffer.toString();int startPosition = dateTemp.lastIndexOf("796F6E6B657223");String date = dateTemp.substring(startPosition);stringBuffer = new StringBuffer();isComnplete = true;if (isComnplete) {isComnplete = false;Log.i("byteDataResult", "===" + date);}}
}public static String fromHexString(String hexString) throws Exception {String result = "";hexString = hexString.toUpperCase();String hexDigital = "0123456789ABCDEF";char[] hexs = hexString.toCharArray();byte[] bytes = new byte[hexString.length() / 2];int n;for (int i = 0; i < bytes.length; i++) {n = hexDigital.indexOf(hexs[2 * i]) * 16 + hexDigital.indexOf(hexs[2 * i + 1]);bytes[i] = (byte) (n & 0xff);}result = new String(bytes, "UTF-8");return result;
}private static void removeProcessedPacket(ByteArrayOutputStream buffer, byte[] packet) {byte[] newData = new byte[buffer.size() - packet.length];int packetStart = 0;for (int i = 0; i < buffer.size(); i++) {if (i < packet.length) {packetStart = i;} else {newData[i - packet.length] = buffer.toByteArray()[i];}}buffer.reset();buffer.write(newData, 0, newData.length);
}

}*/


http://www.ppmy.cn/news/1522751.html

相关文章

【前端】中断请求的方式

一 使用 Axios 和取消令牌 1.步骤: 初始化取消源,创建CancelToken const source axios.CancelToken.source();传递cancelToken, 发起请求 axios.get(/api/data, {cancelToken: source.token });触发取消请求 source.cancel(操作被取消);判断错误是否由于取消请求操作引起…

Vue.js 组件化开发:父子组件通信与组件注册详解

Vue.js 组件化开发&#xff1a;父子组件通信与组件注册详解 简介&#xff1a; 在 Vue.js 的开发中&#xff0c;组件是构建应用的重要基础。掌握组件的创建与使用&#xff0c;尤其是父子组件的通信和组件的注册与命名&#xff0c;是开发中不可或缺的技能。本文将详细探讨这些内容…

【前端】CSS控制style样式失效

在CSS中&#xff0c;可以通过几种方式控制或禁用特定的style样式。 使用all: unset来重置所有可继承的属性&#xff0c;并清除所有的样式&#xff1a; .element {all: unset;} 使用inherit值来使属性获取其父元素的值&#xff1a; .element {color: inherit;font-size: inh…

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物&#xff0c;今天我们实现一下人物实现移动和跳起&#xff0c;依次点击&#xff0c;我们准备创建一个C#文件 创建好我们点击进去&#xff0c;就会跳转到我们的Vision Studio&#xff0c;然后输入这些代码 using UnityEngine;public class M…

Vue 使用接口返回的背景图片和拼图图片进行滑动拼图验证

一、背景 前两天发了一篇 vue-monoplasty-slide-verify 滑动验证码插件使用及踩坑_vue-monoplasty-slide-verify 引用后不显示-CSDN博客 这两天项目又需要通过接口校验&#xff0c;接口返回了背景图片和拼图图片&#xff0c;于是在网上找了一篇帖子&#xff0c;vue 图片滑动…

Apache Ignite 在处理大规模数据时有哪些优势和局限性?

Apache Ignite 在处理大规模数据时的优势和局限性可以从以下几个方面进行分析&#xff1a; 优势 高性能&#xff1a;Ignite 利用内存计算的优势&#xff0c;实现了极高的读写性能&#xff0c;通过分布式架构&#xff0c;它可以将数据分散到多个节点上&#xff0c;从而实现了并…

JavaEE-HTTPHTTPS

目录 HTTP协议 一、概念 二、http协议格式 http请求报文 http响应报文 URL格式 三、认识方法 四、认识报头 HTTP响应中的信息 HTTPS协议 对称加密 非对称加密 中间人攻击 解决中间人攻击 HTTP协议 一、概念 HTTP (全称为 "超⽂本传输协议") 是⼀种应⽤…

2024华为OD机试真题-反射计数Python-C卷D卷-200分

2024华为OD机试最新E卷题库-(C卷+D卷+E卷)-(JAVA、Python、C++) 目录 题目描述 输入描述 输出描述 用例1 题目解析 代码 题目描述 给定一个包含 0 和 1 的二维矩阵。 给定一个初始位置和速度,一个物体从给定的初始位置出发,在给定的速度下进行移动,遇到矩阵的边缘则…