头文件:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdint.h>
class CCRC{
private:
uint32_t m_crc32_table[256];
public:
CCRC();
uint32_t make_crc(uint32_t crc,unsigned char *str ,uint32_t size);
};
源文件:
CCRC::CCRC(){
uint32_t c;
int i = 0;
int bit = 0;
for(i = 0; i < 256; i++){
c = (uint32_t)i;
for(bit = 0; bit < 8; bit++){
if(c&1){
c = (c >> 1)^(0xEDB88320);
}else{
c = c >> 1;
}
}
m_crc32_table[i] = c;
}
}
uint32_t CCRC::make_crc(uint32_t crc,unsigned char *str ,uint32_t size){
while(size--){
crc= (crc >> 8)^(m_crc32_table[(crc ^ *str++) & 0xff]);
}
return crc;
}
使用方法:
CCRC *c = new CCRC;
uint32_t crc = 0xFFFFFFFF;
uint32_t len = 0;
char buf[1024] = {0};
sprintf(buf,"hello world");
len = (uint32_t)strlen(buf);
crc = c->make_crc(crc, (unsigned char*)buf, len);
printf("CRC = 0x%X\r\n",crc);