0

我正在尝试编写一个程序,该程序根据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
}; 
4

0 回答 0