LRC校验算法C语言程序
序言
近日用到关于LRC检验算法,网上了很多资料,其描述方式实在不敢恭维,为方便使用者特写下详细的计算过程,希望对你有所帮助。
By  厦大  Jacky  20120814
LRC校验的数据发送格式
  起始字符(1个字符)+数据(2n个字符)+校验值(2个字符)+结束字符(2个:回车+换行)。
c语言算法书籍LRC校验值计算
  数据(2n个字符)两两组成一个16进制的数值,然后将这些数值相加,将所得加值与256求模,然后用256减去所得模值,得到的数值即为检验值(即:sum%256后取反,再加1)。
范  例
发送数值  :01050BE7FF0009
数值分析  :--  起始字符;01050BE7FF00 -- 数据值; 09 -- 检    验值  ; 其后还有回车换行(未标出)。
数据值拆分:010508070000 -->0x01 0x05 0x0B 0xE7 0xFF 0x00
求和:  0x01+0x05+0x0B+0xE7+0xFF+0x00 =0x01F7;
取模,取反:  0x1F7%0x100=0xF7  0xF7 取反  0x08
加1:  0x08+1=0x09  (校验值)
C语言算法:
    uchar data[17]={0x3a,0x30,0x31,0x30,0x35,
                    0x00,0x00,0x00,0x00,//no
                    0x00,0x00,0x00,0x00,//status   
                    0x00,0x00,            //LRCData
                    0x0d,0x0a       
                    };
//*******************************************************************************
// 语法格式:uchar LRC_Check(uchar *data,uchar length);
// 实现功能:LRC数据检测算法程序
// 参数:    无
// 返回值:    LRC检验值
//******************************************
uchar LRC_Check(uchar *data,uchar length)
{
    uchar i;
    uint k;
    uchar result;
    uchar lrcdata[length];
    for(i=1;i<length+1;i++)
    {
        if(data[i]>0x40)
            lrcdata[i-1]=data[i]-0x41+10;
        else
            lrcdata[i-1]=data[i]-0x30;   
    }       
    k=0;   
    for(i=0;i<length/2;i++)
    {       
        k+=(lrcdata[2*i]*16+lrcdata[2*i+1]);   
    }
    k=k%256;
    k=256-k;
    result=k%256;
    return result;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。