Java 我如何知道纵向冗余检查的计算是否正确,如何使用它来确保之前的数据没有损坏?

Java 我如何知道纵向冗余检查的计算是否正确,如何使用它来确保之前的数据没有损坏?,java,byte,protocols,checksum,redundancy,Java,Byte,Protocols,Checksum,Redundancy,我如何知道纵向冗余检查的计算是否正确,如何使用它来确保之前的数据没有损坏 这就是我现在在Java中计算它的方式,但是在给定数据的情况下,我如何知道我正确地计算了它 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 calc

我如何知道纵向冗余检查的计算是否正确,如何使用它来确保之前的数据没有损坏

这就是我现在在Java中计算它的方式,但是在给定数据的情况下,我如何知道我正确地计算了它

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 calculateLRC2(byte[] bytes) {
    byte checksum = 0;
    for (int i = 1; i < bytes.length - 1; i++) {
        checksum ^= (bytes[i] & 0xFF);          
    }
    return checksum;
}
byte[]testMessage1={0x02,//STX
0x10,0x2,0xA,0x10,0x10,0x7,0x8,//数据02,A,10,7,8
0x03,//ETX
0x2^0xA^0x10^0x7^0x8^0x03};//根据数据(删除DLE)加上ETX计算的LRC
公共静态字节计算器RC2(字节[]字节){
字节校验和=0;
for(int i=1;i
在我看来,您正在寻找一个错误问题的答案,因为LRC检查是为了确定您是否正确读取了数据。但是,如果您只是想验证您的实现,那么可以从实际示例中创建单元测试。请记住,LRC用于验证从源中读取的数据是否正确(而不是回火或错误),因此LRC必须在数据中可用。您的代码只是为了确保您正在计算的LRC与源中可用的LRC匹配。如果在任何情况下您都无法访问样本数据,那么您可以尝试在线工具,例如。回到代码下面的代码是我用java编写的,用于验证信用卡磁条读取


您是否将此数据发送到另一个可以解码的系统?计算非常简单(XOR),所以我认为你不会有问题。不知道申请是什么。对不起,我在帖子里没有提到这个。我不是在发送数据。示例“testMessage”数据就是我用来解析的数据。我基本上必须找到ETX、STX并查看消息是否有效。然后测试消息中的LRC应该与您从数据字节计算的值相匹配。因此,这是否意味着我必须消除在计算它们时充当分隔符的0x10?我不知道这是否是“数据”的一部分。取决于您的协议的解释。试试看。
String str = ";4564456445644564=1012101123456789?";
byte lrc = 0x00;
byte [] binaryValue = str.getBytes();

for(byte b : binaryValue) {

    lrc ^= b;
}

// lrc msut be between 48 to 95
lrc %= 48; 
lrc += 48;

System.out.println("LRC: " + (char) lrc);