建议读者在阅读本文之前,先阅读一下本人的上一篇文章《循环冗余校验 CRC (Cyclic Redundancy Check) 教程(一)》,这会帮助读者更容易地理解本文所讨论的内容。
关于逐位计算CRC的算法,还有一种相对来说比较少采用的编程方法。
我们看一下下面的这段代码:
这段代码来自GitHub,读者可以点击链接查看原文。
Program 1: Error detecting code using CRC-CCITT (16- bits) Sender Program
#include<stdio.h>
#include<stdlib.h>
#define GR1 0x0810 //G = 0x11021
static int R=0;
void updateCRC(int x)
{
int i, x_msb;
for(i=7;i >= 0;i--)
{
x_msb = (x >> i) & 1; /* k = msb of x*/
R = (R & 0x8000)?( ((R ^ GR1) << 1) + (x_msb ^ 1) ):((R << 1) + x_msb);
R &= 0xffff;
} }
int main(int argc, char** argv)
{
int c;
FILE *fp;
if(argc = =1)
printf("Usage:#%s filename\n\n",argv[0]), e

最低0.47元/天 解锁文章
3275

被折叠的 条评论
为什么被折叠?



