LRC纵向冗余校验

LRC校验 纵向冗余校验(Longitudinal Redundancy Check,简称:LRC)是通信中常用的一种校验形式,也称LRC校验或纵向校验。它是一种从纵向通道上的特...

LRC校验

纵向冗余校验(Longitudinal Redundancy Check,简称:LRC)是通信中常用的一种校验形式,也称LRC校验或纵向校验。它是一种从纵向通道上的特定比特串产生校验比特的错误检测方法。在行列格式中(如磁带),LRC经常是与VRC一起使用,这样就会为每个字符校验码。在工业领域Modbus协议Ascii模式采用该算法。 具体算法如下: 1、对需要校验的数据(2n个字符)两两组成一个16进制的数值求和。 2、将求和结果与256求模。 3、用256减去所得模值得到校验结果(另一种方法:将模值按位取反然后加1)。 例如16进制数据:01 A0 7C FF 02 (16进制计算) 求和:01 + A0 + 7C + FF + 02 = 21E 取模:21E % 100 = 1E 计算:100 - 1E = E2 (10进制计算) 求和:01 + 160 + 124 + 255 + 02 = 542 取模:542 % 256 = 30 计算:256 - 30 = 226

方法一:

buf[]传入字节,index起始位,bytetotal要校验的长度。

int xor16(unsigned char buf[], int index, long bytetotal)

{

// unsigned char buff = 0;

int buff=0;

int i;

for (i = index; i

buff = buff^(int)buf[i];

}

return buff;

}

方法二:

unsigned char calc_lrc2(unsigned char* data, int data_len)

{

unsigned char lrc = 0;

for (int i = 0; i < data_len; i++)

{

lrc ^= data[i];

printf("%02X\n",lrc);

}

return lrc;

}