永发信息网

你好,求教crc校验

答案:3  悬赏:60  手机版
解决时间 2021-03-04 17:02
  • 提问者网友:爱唱彩虹
  • 2021-03-03 23:44
大神,知道里麻烦回答下,好让我采纳你的答案
最佳答案
  • 五星知识达人网友:一把行者刀
  • 2021-03-04 00:25
CRC16 8005代码。


#define  CRC_16_POLYNOMIALS (0x8005)    // CRC16校验生成多项式
unsigned short calcByte(int crc, char b)
{
    int i;
    crc = crc ^ (int)b << 8;


    for ( i = 0; i < 8; i++)
    {
        if ((crc & 0x8000) == 0x8000)
        {
            crc = crc << 1 ^ CRC_16_POLYNOMIALS;
        }
        else
        {
            crc = crc << 1;
        }
    }

    return crc & 0xffff;
}


unsigned short CRC16(char *pBuffer, int length)
{
    unsigned short wCRC16=0x0; // 初值
    if ((NULL == pBuffer)||(0 == length))
    {
        return 0;
    }
    for (int i = 0; i < length; i++)
    {
        wCRC16 = calcByte(wCRC16, pBuffer[i]);
    }
    return wCRC16;
}
全部回答
  • 1楼网友:野味小生
  • 2021-03-04 02:22
CRC即循环冗余校验码(Cyclic Redundancy Check[1] ):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。 工作原理 循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 校验码的具体生成过程为:假设要发送的信息用多项式C(X)表示,将C(x)左移R位(可表示成C(x)*2R),这样C(x)的右边就会空出R位,这就是校验码的位置。用 C(x)*2R 除以生成多项式G(x)得到的余数就是校验码。 任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010
  • 2楼网友:你可爱的野爹
  • 2021-03-04 01:44
1、16位crc校验原理与基于plc的算法程序设计:http://www.docin.com/p-240665334.html2、modbus_crc16.rar,下载:http://bbs.gkong.com/archive.aspx?id=2298363、crc校验的原理和实现:http://www.ad.siemens.com.cn/service/answer/solution.aspx?q_id=69622
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯