永发信息网

如何计算十五个字节的CRC8校验

答案:2  悬赏:30  手机版
解决时间 2021-02-24 07:20
  • 提问者网友:川水往事
  • 2021-02-23 10:44
如何计算十五个字节的CRC8校验
最佳答案
  • 五星知识达人网友:神也偏爱
  • 2021-02-23 11:23
在CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算。  CRC计算方法是:  1、 加载一值为0xFFFF的16位寄存器,此寄存器为CRC寄存器。  2、 把第一个8位二进制数据(即通讯信息帧的第一个字节)与16位的CRC寄存器的相异或,异或的结果仍存放于该CRC寄存器中。  3、 把CRC寄存器的内容右移一位,用0填补最高位,并检测移出位是0还是1。  4、 如果移出位为零,则重复第三步(再次右移一位);如果移出位为1,CRC寄存器与0xA001进行异或。  5、 重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理。  6、 重复步骤2和5,进行通讯信息帧下一个字节的处理。  7、 将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换  8、 最后得到的CRC寄存器内容即为:CRC校验码。
全部回答
  • 1楼网友:鱼芗
  • 2021-02-23 12:22
// 8bit crc (x(8) + x(2) + x(1) + 1) typedef unsigned long  dword; typedef unsigned short word; typedef unsigned char  byte; #define al2_fcs_coef ((1 << 7) + (1 << 6) + (1 << 5)) //data为指向校验数据的指针,length为长度,返回一个字节的校验码 byte getcrc8(unsigned char * data, int length) {    byte cfcs = 0;    int i, j;    for( i = 0; i < length; i ++ )    {       cfcs ^= data[i];       for(j = 0; j < 8; j ++)       {          if(cfcs & 1)          {             cfcs = (byte)((cfcs >> 1) ^ al2_fcs_coef);          }          else          {             cfcs >>= 1;          }       }    }    return cfcs; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯