Android 串口数据分包处理

news/2024/9/17 7:47:08/ 标签: android

/*
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 的二维矩阵。 给定一个初始位置和速度,一个物体从给定的初始位置出发,在给定的速度下进行移动,遇到矩阵的边缘则…

分布式部署①

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 1. 需要部署的服务 Nacos 理论上,应…

仕考网:事业编面试全流程介绍

1.进入考场 工作人员会检查考生的身份证、准考证以及随身携带物品&#xff0c;可以带食物和水 2.进入候考室 进入候考室&#xff0c;工作人员会再次确认考生信息 3.抽签 考生到齐后&#xff0c;工作人员会组织考生抽签&#xff0c;登记抽签序号、信息确认、发放号码牌 4.…

【Android】使用和风天气API获取天气数据吧!(天气预报系列之一)

【Android】使用和风天气API获取天气数据吧&#xff01;&#xff08;天气预报系列之一&#xff09; 古话说得好&#xff0c;要有天气预报&#xff0c;首先需要有天气&#xff0c;和预报。 今天给大家介绍一个好用的天气预报API&#xff1a;和风天气。以及webAPI的使用方法~&a…

React 应用中集成 Ace Editor

安装 React-Ace 首先&#xff0c;你需要安装 react-ace 和 ace-builds&#xff08;它包含 Ace Editor 的核心文件&#xff09;&#xff1a; pnpm install react-ace ace-builds用法&#xff1a; import React from react; import AceEditor from react-ace;// 引入你需要的 …

从“游戏科学”到玄机科技:《黑神话:悟空》的视角打开动漫宇宙

近日&#xff0c;中国游戏界迎来了一场前所未有的盛事——由游戏科学公司开发的《黑神话&#xff1a;悟空》正式上线&#xff0c;并迅速成为全球玩家热议的焦点。在居高不下的讨论热度中&#xff0c;有人说他的成功在于对《西游记》为背景进行改编&#xff0c;对原著进行了分析…

es安装ik分词器

下载分词器 首先确定es对应的版本&#xff08;假设版本是7.10.0&#xff09;根据版本下载指定的分词器 开始安装 在线安装 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.10.0/elasticsearch-analysis-ik-…

如何在 Java 中实现线程安全的单例模式?

单例模式是一种常用的软件设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点。 在多线程环境下&#xff0c;确保单例模式的线程安全性是非常重要的&#xff0c;因为多个线程可能会同时尝试创建实例&#xff0c;导致实例不唯一的问题。 单例模式…

[数据集][目标检测]翻越栏杆行为检测数据集VOC+YOLO格式512张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;512 标注数量(xml文件个数)&#xff1a;512 标注数量(txt文件个数)&#xff1a;512 标注类别…

设计模式-装饰器代理观察者

3.7 装饰器模式&#xff08;代码见vs&#xff09; 装饰器又叫做包装模式&#xff0c;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种模式创建了一个装饰类&#xff0c;用来包装原有的类&#xff0c;并在保持类方法完整性的前提下&#xff0c;提供了额…

ssm微信小程序的英语学习激励系统论文源码调试讲解

2 关键技术介绍 2.1 SSM框架 开发信息管理系统的主流框架是SSM&#xff08;Spring Spring MVC MyBatis&#xff09;&#xff0c;SSM框架web层使用Spring MVC框架&#xff0c;使传输前后端数据变得简单&#xff1b;对于业务层使用Spring作为轻量级控制反转和面向切面的容器框…

Java JVM 垃圾回收算法详解

Java 虚拟机&#xff08;JVM&#xff09;是运行 Java 应用程序的核心&#xff0c;它的垃圾回收&#xff08;Garbage Collection, GC&#xff09;机制是 JVM 中非常重要的一个部分。垃圾回收的主要任务是自动管理内存&#xff0c;回收那些不再被使用的对象&#xff0c;从而释放内…

网吧业务安全对抗(有源码)

网吧业务竞争激烈&#xff0c;网吧都会有以下系统软件。 无盘: 无盘是指没有硬盘。好处是统一维护管理和节约成本。本人研究无盘好几年&#xff0c;后面会专门发帖介绍。 计费: 是指收费系统。 营销软件: 包括销售饮品、‌零食和向客户发送电子邮件营销和短信营销等。产品如…