⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makecrc.c

📁 harvest是一个下载html网页得机器人
💻 C
字号:
/* This program will write six C routines for the calculation of * the following CRC's. *//* The CRC polynomial. * These 4 values define the crc-polynomial. * If you change them, you must change crctab[]'s initial value to what is * printed by initcrctab() [see 'compile with -DMAKETAB' above]. *//* This tables assumes CCITT is MSB first.  Swapped means LSB first.   In that * case the polynomial is also swapped *//* 16 bit crc's *//* Value used by:			CCITT	KERMIT	ARC	BINHEX	*//* the poly:				0x1021	0x8408	0xA001	0x1021	*//* original:				0x1021	0x1021	0x8005	0x1021	*//* init value:				-1	0	0	0	*//* swapped:				no	yes	yes	no	*//* bits in CRC:				16	16	16	16	*//* ARC used by LHARC, ZOO, STUFFIT					*//* BINHEX used by XMODEM, PACKIT					*//* 32 bit crc's *//* Value used by:			CCITT32		ZIP		*//* the poly:				0x04c11db7	0xedb88320	*//* original:				0x04c11db7	0x04c11db7	*//* init value:				-1		-1		*//* swapped				no		yes		*//* bits in CRC:				32		32		*//* ZIP used by COMPACTOR						*/#include <stdio.h>extern void exit();extern char *strcat();static void initcrctab();main(){    initcrctab("ccitt", 0x1021, 0xffff, 0, 16);    initcrctab("kermit", 0x8408, 0, 1, 16);    initcrctab("arc", 0xa001, 0, 1, 16);    initcrctab("binhex", 0x1021, 0, 0, 16);    initcrctab("ccitt32",0x04c11db7,0xffffffff,0,32);    initcrctab("zip",0xedb88320,0xffffffff,1,32);    exit(0);    /*NOTREACHED*/}static void initcrctab(name, poly, init, swapped, bits)char *name;int poly, init, swapped, bits;{    register  int b, i;    unsigned short v;    unsigned long vv;    FILE *fd;    char buf[20];        buf[0] = 0;    (void)strcat(buf, name);    (void)strcat(buf, ".c");    if((fd = fopen(buf, "w")) == NULL) {	(void)fprintf(stderr, "Cannot open %s for writing\n", buf);	exit(1);    }    (void)fprintf(fd, "unsigned long %s_crcinit = %d;\n", name, init);    (void)fprintf(fd, "\n");    if(bits == 16) {	(void)fprintf(fd, "static unsigned short crctab[256] = {\n");    } else {	(void)fprintf(fd, "static unsigned long crctab[256] = {\n");    }    (void)fprintf(fd, "    ");    if(bits == 16) {	for(b = 0; b < 256; ++b) {	    if(swapped) {		for(v = b, i = 8; --i >= 0;)		    v = v & 1 ? (v>>1)^poly : v>>1;	    } else {		for(v = b<<8, i = 8; --i >= 0;)		    v = v & 0x8000 ? (v<<1)^poly : v<<1;	    }	    (void)fprintf(fd, "0x%.4x,", v & 0xffff);	    if((b&7) == 7) {		(void)fprintf(fd, "\n");		if(b != 255) (void)fprintf(fd, "    ");	    } else {		(void)fprintf(fd, " ");	    }	}    } else {	for(b = 0; b < 256; ++b) {	    if(swapped) {		for(vv = b, i = 8; --i >= 0;)		    vv = vv & 1 ? (vv>>1)^poly : vv>>1;	    } else {		for(vv = b<<24, i = 8; --i >= 0;)		    vv = vv & 0x80000000 ? (vv<<1)^poly : vv<<1;	    }	    (void)fprintf(fd, "0x%.8x,", vv & 0xffffffff);	    if((b&3) == 3) {		(void)fprintf(fd, "\n");		if(b != 255) (void)fprintf(fd, "    ");	    } else {		(void)fprintf(fd, " ");	    }	}    }    (void)fprintf(fd, "};\n");    (void)fprintf(fd, "\n");    (void)fprintf(fd, "unsigned long %s_updcrc(icrc, icp, icnt)\n", name);    (void)fprintf(fd, "    unsigned long icrc;\n");    (void)fprintf(fd, "    unsigned char *icp;\n");    (void)fprintf(fd, "    int icnt;\n");    (void)fprintf(fd, "{\n");    if(bits == 16) {	(void)fprintf(fd, "#define M1 0xff\n");	(void)fprintf(fd, "#define M2 0xff00\n");    } else {	(void)fprintf(fd, "#define M1 0xffffff\n");	(void)fprintf(fd, "#define M2 0xffffff00\n");    }    (void)fprintf(fd, "    register unsigned long crc = icrc;\n");    (void)fprintf(fd, "    register unsigned char *cp = icp;\n");    (void)fprintf(fd, "    register int cnt = icnt;\n");    (void)fprintf(fd, "\n");    (void)fprintf(fd, "    while(cnt--) {\n");    if(bits == 16) {	if (swapped) {	    (void)fprintf(fd,		    "\tcrc=((crc>>8)&M1)^crctab[(crc&0xff)^*cp++];\n");	} else {	    (void)fprintf(fd,		    "\tcrc=((crc<<8)&M2)^crctab[((crc>>8)&0xff)^*cp++];\n");	}    } else {	if(swapped) {	    (void)fprintf(fd,		    "\tcrc=((crc>>8)&M1)^crctab[(crc&0xff)^*cp++];\n");	} else {	    (void)fprintf(fd,		    "\tcrc=((crc<<8)&M2)^crctab[((crc>>24)&0xff)^*cp++];\n");	}    }    (void)fprintf(fd, "    }\n");    (void)fprintf(fd, "\n");    (void)fprintf(fd, "    return(crc);\n");    (void)fprintf(fd, "}\n");    (void)fprintf(fd, "\n");    (void)fclose(fd);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -