我正在尝试编写一个程序,该程序根据byte[]
数组中的消息协议返回有效数据。
我有:
STX: 0x02
ETX: 0X03
DLE: 0x10 //Delimiter
有效数据是当byte[]
数组包含 STX、ETX、数据和正确计算的 LRC 时,例如:
byte[] validMsg1 = {0x02, // STX
0x10,0x2,0xA,0x10,0x10,0x7,0x8, // Data 2 A 10 7 8
0x03, // ETX
0x2^0xA^0x10^0x7^0x8^0x03}; // LRC calculated from the data (with the DLE removed) plus the ETX
无效数据示例:
byte[] invalidMsg1 = {0x02, // STX
0x10,0x2,0xA, // Data 2 A
0x03, // ETX
0x2^0xA^0x10^0x7^0x8^0x03,
0x02, //STX
0x05,0x44};
该字节还可能包含有效数据周围的随机值:
byte[] validMsgWithRandomData1 = {0x32,0x32,0x32, //Random data
0x02, // STX
0x31,0x32,0x10,0x02,0x33, // Data 31 32 02 33
0x03, // ETX
0x31^0x32^0x02^0x33^0x03,// LRC calculated from the data (with the DLE removed) plus the ETX
0x2,0x3,0x00,0x02 //Random data
};
我的问题是,当我使用带有随机数据的消息并0x2,0x3,0x00,0x02
让它中断时,因为它将 0x02 和 0x03 视为 STX 和 ETX,然后它计算 LRC 导致 0x03 导致返回:0x2,0x3,0x00
最后一个 0x03 被视为法改委。
问题是这个有效数据:
byte[] data = {
0x02, // STX
0x03, // ETX
0x00, // LRC
};
我应该返回最新的有效数据,但其中有更好的数据:
byte[] validData = {
0x02, // STX
0x31,0x32,0x10,0x02,0x33, // Data 31 32 02 33
0x03, // ETX
0x31^0x32^0x02^0x33^0x03,// LRC calculated from the data (with the DLE removed) plus the ETX
};