?? crc.c
字號(hào):
/* compute crc's *//* crc-16 is based on the polynomial x^16+x^15+x^2+1 *//* The data is assumed to be fed in from least to most significant bit *//* crc-ccitt is based on the polynomial x^16+x^12+x^5+1 *//* The data is fed in from most to least significant bit *//* The prescription for determining the mask to use for a given polynomial is as follows: 1. Represent the polynomial by a 17-bit number 2. Assume that the most and least significant bits are 1 3. Place the right 16 bits into an integer 4. Bit reverse if serial LSB's are sent first*//* Usage : crc2 [filename] */#include <stdio.h>#include <stdlib.h>#include <string.h>#define M16 0xA001 /* crc-16 mask */#define MTT 0x1021 /* crc-ccitt mask *//* function declarations */unsigned int updcrc(unsigned int,int,unsigned int);unsigned int updcrcr(unsigned int,int,unsigned int);void perr(char *);/* variables */char filename[100];unsigned int crc16,crctt;int ch;unsigned long num;FILE *fp;/* driver */main(argc,argv)int argc; char **argv;{ if(argc>2) perr("Usage: crc2 [filename]"); if(argc==2) strcpy(filename,argv[1]); else { printf("\nEnter filename: "); gets(filename); } if((fp=fopen(filename,"rb"))==NULL) perr("Can't open file"); num=0L; crc16=crctt=0; while((ch=fgetc(fp))!=EOF) { num++; crc16=updcrcr(crc16,ch,M16); crctt=updcrc(crctt,ch,MTT); } fclose(fp); printf("\nNumber of bytes = %lu\nCRC16 = %04X\nCRCTT = %04X", num,crc16,crctt);}/* update crc */unsigned int updcrc(crc,c,mask)unsigned int crc,mask; int c;{ int i; c<<=8; for(i=0;i<8;i++) { if((crc ^ c) & 0x8000) crc=(crc<<1)^mask; else crc<<=1; c<<=1; } return crc;}/* update crc reverse */unsigned int updcrcr(crc,c,mask)unsigned int crc,mask; int c;{ int i; for(i=0;i<8;i++) { if((crc ^ c) & 1) crc=(crc>>1)^mask; else crc>>=1; c>>=1; } return crc;}/* error abort */void perr(s)char *s;{ printf("\n%s",s); exit(1);}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -