fix(iot): fix JT808 escape logic to exclude packet delimiters
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled

This commit is contained in:
lzh
2026-01-16 15:01:18 +08:00
parent 60ed93f9b0
commit 4047cbc414

View File

@@ -38,26 +38,23 @@ public class Jt808ProtocolUtil {
}
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
// 写入起始部分
for (int i = 0; i < start; i++) {
baos.write(bs[i]);
}
// 处理需要反转义的部分
for (int i = start; i < end - 1; i++) {
if (bs[i] == 0x7d && bs[i + 1] == 0x01) {
baos.write(0x7d);
i++;
} else if (bs[i] == 0x7d && bs[i + 1] == 0x02) {
baos.write(0x7e);
i++;
// 只处理 start 到 end 范围内的数据(不包含 start 之前和 end 之后的数据)
// 这样返回的数组就是纯净的、去除了首尾标识符且已反转义的数据包
for (int i = start; i < end; i++) {
if (bs[i] == 0x7d && i + 1 < end) { // 确保 i+1 不越界
if (bs[i + 1] == 0x01) {
baos.write(0x7d);
i++;
} else if (bs[i + 1] == 0x02) {
baos.write(0x7e);
i++;
} else {
baos.write(bs[i]);
}
} else {
baos.write(bs[i]);
}
}
// 写入结束部分
for (int i = end - 1; i < bs.length; i++) {
baos.write(bs[i]);
}
return baos.toByteArray();
}
}