我的消息协议如下:
下面是我正在测试的数据测试消息:
byte[] testMessage1 = {
0x02, // STX
0x10,0x2,0xA,0x10,0x10,0x7,0x8, // Data 02, A, 10, 7, 8
0x03, // ETX
0x2^0xA^0x10^0x7^0x8^0x03 // LRC calculated from the data (with the DLE removed) plus the ETX
}; 以下是法改会的计算数字:
public static byte calculateLRC(byte[] bytes) {
byte LRC = 0;
for (int i = 1; i < bytes.length; i++) {
LRC ^= bytes[i];
}
return LRC;
} 如何根据协议对测试字节消息进行LRC计算,以检查其是否为有效消息,以及未损坏之前的数据?
发布于 2015-04-10 13:01:02
从广义上讲,解析可以使用状态变量,并根据下一个符号读取状态进行更改(错误是一个可能的状态)。
在您的协议中,为了验证一条消息,如果您从一开始就从逻辑上考虑它,您可以计算出状态。
第一个字节显然必须是STX,否则它将不是有效的消息。在此之后,您需要计算LRC,同时也要查找ETX。一旦找到ETX,下一个字节必须是LRC。条件状态,比如通过DLE转义,也可以表示为不同的状态:
State 0:
If Symbol STX -> State 1
else -> Error
State 1:
If Symbol = ETX -> State 3
else if Symbol = DLE -> State 2
else update LRC
State 2:
update LRC -> State 1
State 3:
if Symbol == LRC -> Ok
else Error一旦您有了这个状态转换表,将它放入代码中就不会太困难了。
https://stackoverflow.com/questions/29559288
复制相似问题