📄 crc.c
字号:
//CRC校验算法
unsigned char S[130]; //原始数据为128字节,CRC校验2字节
unsigned int CRC ( ) //CRC校验算法(共130字节)
{
unsigned int i,j,m,n,p,q,c=0x1021;
m=S[0]*256+S[1]; //首先取两个字节,拼成16位整数,作为基数
for (i=1;i<=64;i++) { //其余128字节分64批处理,每批2字节
n=S[2*i]*256+S[2*i+1]; //取两个字节,拼成16位整数
for (j=0;j<16;j++) { //每批计算16次,每次处理1比特
p = m & 0x8000; //保留基数的最高位
q = n & 0x8000; //保留当前整数的最高位
m <<= 1 ; n <<= 1 ;//两者均左移一位
if (q) m++ ; //当前整数的最高位拼入基数的最低位
if (p) m ^= c ; //如果基数移出的最高位为1,则“减去”0x1021
}
}
return m; //返回校验结果
}
main ( )
{
int i;
unsigned int c;
for (i=0;i<128;i++) S[i]=i;//设置128字节原始数据
S[128]=S[129]=0; //将最后两个字节设置为零
c = CRC ( ) ; //进行CRC校验
S[128]=c/256;S[129]=c%256;//将校验结果装入最后两个字节
c = CRC ( ) ; //再进行CRC校验,结果应该为零
S[4] ^= 0x20; //引入一个差错
c = CRC ( ) ; //再进行CRC校验,结果不为零,发现差错
S[6] ^= 0xff; //再引入8个差错
c = CRC ( ) ; //再进行CRC校验,结果不为零,发现差错
while (1) ; //在这一行设置断点,中止程序运行,以便观察程序运行的结果
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -