From 8d662de2fd262b3a485f16e197cb4d0ca2a61cdf Mon Sep 17 00:00:00 2001
From: zsh_root <979909237@qq.com>
Date: 星期三, 10 十二月 2025 17:03:47 +0800
Subject: [PATCH] 发布版V1.0

---
 src/jiexi/PacketParser.java |  134 ++++++++++++++++++++++----------------------
 1 files changed, 67 insertions(+), 67 deletions(-)

diff --git a/src/jiexi/PacketParser.java b/src/jiexi/PacketParser.java
index b30704d..75a6e3d 100644
--- a/src/jiexi/PacketParser.java
+++ b/src/jiexi/PacketParser.java
@@ -2,32 +2,32 @@
 import java.util.ArrayList;
 import java.util.List;
 
-// 重命名为PacketParser,表示数据包解析器
+// 閲嶅懡鍚嶄负PacketParser锛岃〃绀烘暟鎹寘瑙f瀽鍣�
 public class PacketParser {
-	// 添加十六进制字符数组常量
+	// 娣诲姞鍗佸叚杩涘埗瀛楃鏁扮粍甯搁噺
 	private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
-	// 缓冲区字节数组
+	// 缂撳啿鍖哄瓧鑺傛暟缁�
 	private byte[] buffer = new byte[4096];
-	// 当前缓冲区有效数据长度
+	// 褰撳墠缂撳啿鍖烘湁鏁堟暟鎹暱搴�
 	private int bufferLength = 0;
 
-	// 追加新数据到缓冲区
+	// 杩藉姞鏂版暟鎹埌缂撳啿鍖�
 	public void appendData(byte[] newData, int length) {
-		// 检查缓冲区是否足够
+		// 妫�鏌ョ紦鍐插尯鏄惁瓒冲
 		if (bufferLength + length > buffer.length) {
-			// 创建新的更大缓冲区
+			// 鍒涘缓鏂扮殑鏇村ぇ缂撳啿鍖�
 			byte[] newBuffer = new byte[bufferLength + length];
-			// 复制原有数据
+			// 澶嶅埗鍘熸湁鏁版嵁
 			System.arraycopy(buffer, 0, newBuffer, 0, bufferLength);
 			buffer = newBuffer;
 		}
-		// 追加新数据
+		// 杩藉姞鏂版暟鎹�
 		System.arraycopy(newData, 0, buffer, bufferLength, length);
-		// 更新缓冲区长度
+		// 鏇存柊缂撳啿鍖洪暱搴�
 		bufferLength += length;
 	}
 
-	// 新增方法:字节数组转十六进制字符串
+	// 鏂板鏂规硶锛氬瓧鑺傛暟缁勮浆鍗佸叚杩涘埗瀛楃涓�
 	public static String bytesToHexString(byte[] bytes) {
 		if (bytes == null) return "";
 		char[] hexChars = new char[bytes.length * 2];
@@ -39,73 +39,73 @@
 		return new String(hexChars);
 	}
 
-	// 解析缓冲区中的所有完整数据包
+	// 瑙f瀽缂撳啿鍖轰腑鐨勬墍鏈夊畬鏁存暟鎹寘
 	public List<DataPacket> parsePackets() {
 		List<DataPacket> packets = new ArrayList<>();
-		int index = 0;  // 当前解析位置索引
+		int index = 0;  // 褰撳墠瑙f瀽浣嶇疆绱㈠紩
 
-		// 遍历缓冲区查找完整数据包
-		while (index <= bufferLength - 4) { // 确保有足够数据检查包头
-			// 检查包头标识 0x55 0xAA
+		// 閬嶅巻缂撳啿鍖烘煡鎵惧畬鏁存暟鎹寘
+		while (index <= bufferLength - 4) { // 纭繚鏈夎冻澶熸暟鎹鏌ュ寘澶�
+			// 妫�鏌ュ寘澶存爣璇� 0x55 0xAA
 			if (buffer[index] == 0x55 && (buffer[index + 1] & 0xFF) == 0xAA) {
-				// 获取包类型(第3字节)
+				// 鑾峰彇鍖呯被鍨嬶紙绗�3瀛楄妭锛�
 				int packetType = buffer[index + 2] & 0xFF;
-				// 获取数据长度(第4字节)
+				// 鑾峰彇鏁版嵁闀垮害锛堢4瀛楄妭锛�
 				int dataLenField = buffer[index + 3] & 0xFF;
-				// 计算完整包长度(包头+数据+校验)
-				int totalPacketLen = 2 + dataLenField + 2;  // 增加2字节校验位
+				// 璁$畻瀹屾暣鍖呴暱搴︼紙鍖呭ご+鏁版嵁+鏍¢獙锛�
+				int totalPacketLen = 2 + dataLenField + 2;  // 澧炲姞2瀛楄妭鏍¢獙浣�
 
-				// 检查是否有足够数据构成完整包
+				// 妫�鏌ユ槸鍚︽湁瓒冲鏁版嵁鏋勬垚瀹屾暣鍖�
 				if (index + totalPacketLen > bufferLength) {
-					break; // 数据不足,等待更多数据
+					break; // 鏁版嵁涓嶈冻锛岀瓑寰呮洿澶氭暟鎹�
 				}
 
-				// 提取完整数据包
+				// 鎻愬彇瀹屾暣鏁版嵁鍖�
 				byte[] packetData = new byte[totalPacketLen];
 				System.arraycopy(buffer, index, packetData, 0, totalPacketLen);
 
-				// 验证校验和
+				// 楠岃瘉鏍¢獙鍜�
 				if (verifyChecksum(packetData)) {
-					// 解析单个数据包
+					// 瑙f瀽鍗曚釜鏁版嵁鍖�
 					DataPacket packet = parseSinglePacket(packetType, packetData);
 					if (packet != null) {
-						packets.add(packet); // 添加到结果列表
+						packets.add(packet); // 娣诲姞鍒扮粨鏋滃垪琛�
 					}
-					index += totalPacketLen; // 移动到下一个包
+					index += totalPacketLen; // 绉诲姩鍒颁笅涓�涓寘
 				} else {
-					index++; // 校验失败,跳过当前字节
+					index++; // 鏍¢獙澶辫触锛岃烦杩囧綋鍓嶅瓧鑺�
 				}
 			} else {
-				index++; // 非包头标识,继续查找
+				index++; // 闈炲寘澶存爣璇嗭紝缁х画鏌ユ壘
 			}
 		}
 
-		// 清理已处理数据
+		// 娓呯悊宸插鐞嗘暟鎹�
 		if (index > 0) {
 			int remaining = bufferLength - index;
 			if (remaining > 0) {
-				// 移动剩余数据到缓冲区开头
+				// 绉诲姩鍓╀綑鏁版嵁鍒扮紦鍐插尯寮�澶�
 				System.arraycopy(buffer, index, buffer, 0, remaining);
 			}
-			bufferLength = remaining; // 更新缓冲区长度
+			bufferLength = remaining; // 鏇存柊缂撳啿鍖洪暱搴�
 		}
 
 		return packets;
 	}
 
-	// 校验数据包
+	// 鏍¢獙鏁版嵁鍖�
 	private boolean verifyChecksum(byte[] packet) {
 	    int len = packet.length;
 	    if (len < 4) return false;
 
 	    int sum = 0;
-	    // 从数据类型开始到校验码前结束 (包头2字节已跳过)
+	    // 浠庢暟鎹被鍨嬪紑濮嬪埌鏍¢獙鐮佸墠缁撴潫 (鍖呭ご2瀛楄妭宸茶烦杩�)
 	    for (int i = 2; i < len - 2; i++) {
 	        sum += packet[i] & 0xFF;
 	    }
-	    sum = ~sum & 0xFFFF; // 取反并保留16位
+	    sum = ~sum & 0xFFFF; // 鍙栧弽骞朵繚鐣�16浣�
 
-	    // 获取包中的校验码 (小端模式)
+	    // 鑾峰彇鍖呬腑鐨勬牎楠岀爜 (灏忕妯″紡)
 	    int receivedChecksum = ((packet[len - 1] & 0xFF) << 8) | (packet[len - 2] & 0xFF);
 
 	    return sum == receivedChecksum;
@@ -113,17 +113,17 @@
 
 
 
-	// 解析单个数据包
+	// 瑙f瀽鍗曚釜鏁版嵁鍖�
 	private DataPacket parseSinglePacket(int packetType, byte[] packet) {        
 
-		// 创建数据包对象(包含包类型)
+		// 鍒涘缓鏁版嵁鍖呭璞★紙鍖呭惈鍖呯被鍨嬶級
 		return new DataPacket(packetType, packet);
 	}
 
-	// 数据包内部类
+	// 鏁版嵁鍖呭唴閮ㄧ被
 	public static class DataPacket {
-		private final int packetType;  // 包类型
-		private final byte[] packet;//包数据
+		private final int packetType;  // 鍖呯被鍨�
+		private final byte[] packet;//鍖呮暟鎹�
 
 
 		public DataPacket(int packetType, byte[] packet) {
@@ -131,30 +131,30 @@
 			this.packet = packet;
 		}
 
-		// 获取包类型
+		// 鑾峰彇鍖呯被鍨�
 		public int getPacketType() {
 			return packetType;
 		}
 
-		// 包数据
+		// 鍖呮暟鎹�
 		public byte[] getPacket() {
 			return packet;
 		}
 
 	}
 
-	// HEX字符串转字节数组
+	// HEX瀛楃涓茶浆瀛楄妭鏁扮粍
 	public static byte[] hexStringToBytes(String hex) {
-		// 移除空格
+		// 绉婚櫎绌烘牸
 		hex = hex.replaceAll("\\s", "");
 		int len = hex.length();
-		// 创建结果数组
+		// 鍒涘缓缁撴灉鏁扮粍
 		byte[] data = new byte[len / 2];
-		// 每两个字符转换一个字节
+		// 姣忎袱涓瓧绗﹁浆鎹竴涓瓧鑺�
 		for (int i = 0; i < len; i += 2) {
-			// 高位转换
+			// 楂樹綅杞崲
 			int high = Character.digit(hex.charAt(i), 16) << 4;
-			// 低位转换
+			// 浣庝綅杞崲
 			int low = Character.digit(hex.charAt(i + 1), 16);
 			data[i / 2] = (byte) (high | low);
 		}
@@ -164,57 +164,57 @@
 	
 	
 
-	/**输出校验码*/
+	/**杈撳嚭鏍¢獙鐮�*/
 	public static String calculateChecksum(String input) {
-		// 检查输入是否为空
+		// 妫�鏌ヨ緭鍏ユ槸鍚︿负绌�
 		if (input == null) {
-			throw new IllegalArgumentException("输入不能为null");
+			throw new IllegalArgumentException("杈撳叆涓嶈兘涓簄ull");
 		}
 
-		// 移除所有空格
+		// 绉婚櫎鎵�鏈夌┖鏍�
 		String cleanInput = input.replaceAll("\\s", "");
 
-		// 验证处理后的字符串
+		// 楠岃瘉澶勭悊鍚庣殑瀛楃涓�
 		if (cleanInput.length() < 8 || !cleanInput.startsWith("55AA")) {
-			throw new IllegalArgumentException("输入字符串必须以55AA开头且长度至少为8(去除空格后)");
+			throw new IllegalArgumentException("杈撳叆瀛楃涓插繀椤讳互55AA寮�澶翠笖闀垮害鑷冲皯涓�8锛堝幓闄ょ┖鏍煎悗锛�");
 		}
 
-		// 去掉包头(55AA)和最后4个字符
+		// 鍘绘帀鍖呭ご(55AA)鍜屾渶鍚�4涓瓧绗�
 		String dataPart = cleanInput.substring(4, cleanInput.length() - 4);
 
-		// 检查中间部分长度是否为偶数
+		// 妫�鏌ヤ腑闂撮儴鍒嗛暱搴︽槸鍚︿负鍋舵暟
 		if (dataPart.length() % 2 != 0) {
-			throw new IllegalArgumentException("中间部分长度必须是偶数(去除空格后)");
+			throw new IllegalArgumentException("涓棿閮ㄥ垎闀垮害蹇呴』鏄伓鏁帮紙鍘婚櫎绌烘牸鍚庯級");
 		}
 
 		int sum = 0;
-		// 每两个字符解析为一个字节
+		// 姣忎袱涓瓧绗﹁В鏋愪负涓�涓瓧鑺�
 		for (int i = 0; i < dataPart.length(); i += 2) {
 			String byteStr = dataPart.substring(i, i + 2);
 			int byteValue = Integer.parseInt(byteStr, 16);
-			sum = (sum + byteValue) & 0xFFFF; // 保持16位范围
+			sum = (sum + byteValue) & 0xFFFF; // 淇濇寔16浣嶈寖鍥�
 		}
 
-		// 取反并保持16位
+		// 鍙栧弽骞朵繚鎸�16浣�
 		int checksum = (~sum) & 0xFFFF;
 
-		// 显式处理高位在前格式
-		int  lowByte= (checksum >>> 8) & 0xFF;  // 高8位
-		int  highByte= checksum & 0xFF;           // 低8位
+		// 鏄惧紡澶勭悊楂樹綅鍦ㄥ墠鏍煎紡
+		int  lowByte= (checksum >>> 8) & 0xFF;  // 楂�8浣�
+		int  highByte= checksum & 0xFF;           // 浣�8浣�
 
-		// 格式化为4位十六进制字符串(大写),高位在前
+		// 鏍煎紡鍖栦负4浣嶅崄鍏繘鍒跺瓧绗︿覆锛堝ぇ鍐欙級锛岄珮浣嶅湪鍓�
 		System.out.println(String.format("%02X%02X", highByte, lowByte));
 		return String.format("%02X%02X", highByte, lowByte);
 	}
 
-	/** 将字节数组转为十六进制字符串,例如 [55 AA 01 02 ...] */
+	/** 灏嗗瓧鑺傛暟缁勮浆涓哄崄鍏繘鍒跺瓧绗︿覆锛屼緥濡� [55 AA 01 02 ...] */
 	private static String bytesToHex(byte[] bytes) {
 		if (bytes == null) return "null";
 		StringBuilder sb = new StringBuilder(bytes.length * 3);
 		for (byte b : bytes) {
 			sb.append(String.format("%02X ", b & 0xFF));
 		}
-		// 去掉最后一个空格
+		// 鍘绘帀鏈�鍚庝竴涓┖鏍�
 		return sb.substring(0, sb.length() - 1);
 	}
 	

--
Gitblit v1.10.0