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
————————————————
版权声明:本文为CSDN博主「youandme520」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/youandme520/article/details/107008121
在线验证工具
http://www.ip33.com/lrc.html
golang 实现 thank for github
https://github.com/TheCount/go-lrc
c语言实现
// method 1
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;
}
// method 2
int xor16(unsigned char buf[], int index, long bytetotal)
{
int buff=0;
int i;
for (i = index; i <bytetotal; i++) {
buff = buff^(int)buf[i];
}
return buff;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
2017-11-26 ECC椭圆曲线详解(有具体实例)