cksum

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

基本介紹

  • 外文名:cksum
  • 別名:無
  • 功能說明:檢查檔案的CRC是否正確。
  • 方式:排錯檢查
  • 語 法:cksum [--help][--version]
  • 目的:用戶核對文
功能說明,語 法,補充說明,參 數,

功能說明

檢查檔案的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  顯示版本信息。

相關詞條

熱門詞條

聯絡我們