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 <bytetotal; 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;


}
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值