?? crc16.cpp
字號:
/********************************************************************************\
**功能:實現16位的CRC的計算,輸入為一個一個字節的數據和數據的字節數
** 輸出數據包括數據和16位的CRC碼,與CRC8的區別是傳遞參數時不
** 要生成多項式最高位的1傳遞過去
**作者:田玉利
**修改日期 人員 版本 原因
**20090217 田玉利 1.0 創建
********************************************************************************/
#include <stdafx.h>
#include <stdio.h>
int crctable_16[256] ;
unsigned short getcrc_16(unsigned short *pdata, int nlength) ;
void mk_crctable(unsigned short genpoly) ;
void main()
{
unsigned short crc_16 ;
unsigned short genpoly = 0x1021 ;
unsigned short *pdata ;
unsigned short data = 0x11 ;
int nlength = 1 ;
pdata = &data ;
mk_crctable ( genpoly ) ;
crc_16 = getcrc_16(pdata, nlength) ;
printf( " the crc_16 of %d is %0x\n ", *pdata, crc_16 ) ;
}
unsigned short getcrc_16(unsigned short *pdata, int nlength)
//函數功能:計算數據流* pdata的16位CRC校驗碼,數據流長度為nlength
{
unsigned short crc_16 = 0x0000; // 初始化
char *bdata ; //字符型可以保證每次取一個字節的數據
bdata =(char*)pdata +nlength-1 ;
while(nlength>0)
{
crc_16 = (crc_16 << 8) ^ crctable_16[((crc_16>>8) ^ *bdata) & 0xff]; //crctable_16表由函數mk_crctable生成
nlength--;
bdata--; //指向下一個字節
}
return crc_16;
}
void mk_crctable(unsigned short genpoly)
//函數功能:生成0-255對應的16CRC校驗碼,其實就是計算機算法1(比特型算法)
//genpoly為生成多項式
//注意,低位先傳送時,生成多項式應反轉(低位與高位互換)。如CRC16-CCITT為0x1021,反轉后為0x8408
{
unsigned short crc_16=0;
unsigned short i,j,k;
for(i=0,k=0;i<256;i++,k++)
{
crc_16 = i<<8;
for(j=8;j>0;j--)
{
if(crc_16&0x8000) //反轉時crc_16&0x0001
crc_16=(crc_16<<=1)^genpoly; //反轉時crc_16=(crc_16>>=1)^genpoly
else
crc_16<<=1; //反轉時crc_16>>=1
}
crctable_16[k] = crc_16;
printf(" the crc16 of %d is %0x\n ",k,crc_16);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -