cksum

CRC是一種排錯檢查方式,該演算法的標準由CCITT所指定,至少可檢測到99.998%的已知錯誤。指定檔案交由cksum演算,它會回報計算結果,供用戶核對檔案是否正確無誤。

基本信息

功能說明

檢查檔案的CRC是否正確。

語 法

cksum [--help][--version][檔案...]

補充說明

若不指定任何檔案名稱稱或是所給予的檔案名稱為"-",則cksum指令會從標準輸入設備讀取數據。

算法:

terCRC32用於CRC32的計算。

/* CRC.C——CRC程式庫 */

#define CRCCCITT 0x1021

#define CCITT-REV 0x8408

#define CRC16 0x8005

#define CRC16-REV 0xA001

#define CRC32-POLYNOMIAL 0xEDB88320L

/* 以上為CRC除數的定義 */

#define NIL 0

#define crcupdate(d,a,t)*(a)=(*(a)<<8)^(t)[(*(a)>>8)^(d)];

#define crcupdate16(d,a,t)*(a)=(*(a)>>8^(t)[(*(a)^(d))&0x00ff])

/* 以上兩個宏可以代替函式crcupdate和crcrevupdate */

#include  #include  #include  /* 函式crchware是傳統的CRC算法,其返回值即CRC值 */  unsigned short crchware(data,genpoly,accum)

unsigned short data;/* 輸入的數據 */

unsigned short genpoly;/* CRC除數 */

unsigned short accum;/* CRC累加器值 */

{

static int i;

data<<=8;

for(i=8;i>0;i--)

{

if((data^accum)&0x8000)

accum=(accum<<1)^genpoly;

else

accum<<=1;

data<<=1;

}

return (accum);

}

/* 函式mk-crctbl利用函式crchware建立記憶體中的CRC數值表 */

unsigned short *mk-crctbl(poly,crcfn);

unsigned short poly;/* CRC除數--CRC生成多項式 */

R>unsigned short (*crcfn)();/* 指向CRC函式(例如crchware)的指針 */

{

/* unsigned short */malloc(); */

unsigned short *crctp;

int i;

if((crctp=(unsigned short*)malloc(256*sizeof(unsigned)))==0)

return 0;

for(i=0;i<256;i++)

crctp=(*crcfn)(i,poly,0);

return crctp;

}

/* 函式mk-crctbl的使用範例 */

if((crctblp=mk-crctbl(CRCCCITT,crchware))==NIL)

{

puts("insuff memory for CRC lookup table.\n");

return 1; */

/* 函式crcupdate用以用查表法計算CRC值並更新CRC累加器值 */

void crcupdate(data,accum,crctab)

unsigned short data;/* 輸入的數據 */

unsigned short *accum;/* 指向CRC累加器的指針 */

unsigned short *crctab;/* 指向記憶體中CRC表的指針 */

{

static short comb-val;

comb-val=(*accum>>8)^data;

*accum=(*accum<<8)^crctab[comb-val];

}

/* 函式crcrevhware是傳統的CRC算法的反序算法,其返回值即CRC值 */

unsigned short crcrevhware(data,genpoly,accum)

unsigned short data;

unsigned short genpoly;

unsigned short accum;

{

static int i;

data<<=1;

for(i=8;i>0;i--)

{

data>>=1;

if((data^accum)&0x0001)

accum=(accum>>1)^genpoly;

else

accum>>=1;

}

return accum;

}

/* 函式crcrevupdate用以用反序查表法計算CRC值並更新CRC累加器值 */

void crcrevupdate(data,accum,crcrevtab)

unsigned short data;

unsigned short *accum;

參 數

--help  線上幫助。

--version  顯示版本信息。

相關詞條

熱門詞條

聯絡我們