crc即迴圈冗餘校驗碼(cyclic redundancy check):是資料通訊領域中最常用的一種差錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。crc校驗實用程式庫在資料儲存和資料通訊領域,為了保證資料的正確,就不得不採用檢錯的手段。
下面是crc32的c語言實現,經過測試,能夠正確執行。
crc32.c
#include #include #include #include #define bufsize 1024*4
static unsigned int crc_table[256];
const static char * program_name = "crc32";
static void usage(void);
static void init_crc_table(void);
static unsigned int crc32(unsigned int crc, unsigned char * buffer, unsigned int size);
static int calc_img_crc(const char * in_file, unsigned int * img_crc);
static void usage(void)
/* * 初始化crc表,生成32位大小的crc表
* 也可以直接定義出crc表,直接查表,
* 但總共有256個,看著眼花,用生成的比較方便.
*/
static void init_crc_table(void)
crc_table[i] = c;
} } /* 計算buffer的crc校驗碼 */
static unsigned int crc32(unsigned int crc,unsigned char *buffer, unsigned int size)
return crc ;
} /*
* 計算大檔案的crc校驗碼:crc32函式,是對乙個buffer進行處理,
* 但如果乙個檔案相對較大,顯然不能直接讀取到記憶體當中
* 所以只能將檔案分段讀取出來進行crc校驗,
* 然後迴圈將上一次的crc校驗碼再傳遞給新的buffer校驗函式,
* 到最後,生成的crc校驗碼就是該檔案的crc校驗碼.(經過測試)
*/
static int calc_img_crc(const char *in_file, unsigned int *img_crc)
while ((nread = read(fd, buf, bufsize)) > 0)
*img_crc = crc;
close(fd);
if (nread < 0)
return 0;
} int main(int argc, char **argv)
init_crc_table();
ret = calc_img_crc(in_file, &img_crc);
if (ret < 0)
printf("the crc of %s is:%u\n", in_file, img_crc);
return 0;
}
執行結果(舉例):
# ./crc32 ./crc32.c
the crc of ./crc32.c is:2456832695
**:
CRC32 迴圈冗餘校驗 演算法的簡單介紹
crc校驗實用程式庫 在資料儲存和資料通訊領域,為了保證資料的正確,就不得不採用檢錯的手段。在諸多檢錯手段中,crc是最著名的一種。crc的全稱是迴圈冗餘校驗,其特點是 檢錯能力極強,開銷小,易於用編碼器及檢測電路實現。從其檢錯能力來看,它所不能發現的錯誤的機率僅為0.0047 以下。從效能上和開銷...
CRC32校驗 c實現
環境 vs2013 成功編譯並執行 include include include pragma warning disable 4996 這樣防止警告 dword crc32table 256 0x04 c1 1d b7 dword bitreverse dword poly 進行位顛倒 retu...
迴圈冗餘校驗 CRC校驗
一 crc校驗概念 即迴圈冗餘校驗碼 cyclic redundancy check 是資料通訊領域中最常用的一種查錯校驗碼,迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。其特徵是資訊字段和...