/************************************************
- FUNCTION: *
- 单字节的 crc验证 *
- INPUT: *
- R 余数 *
- PARAMETER: *
- POLY:生成多项式 *
- MSB:最高位 *
- crc:源信息码 *
- crc_r:余数(crc码) * ************************************************/
#include
#define POLY 0xEDB88320
#define MSB 0x80000000
typedef unsigned long CRC32;
typedef unsigned char BYTE;
CRC32 crc_test(BYTE crc, int len);
int main(int argc, char **argv)
{
CRC32 result;
BYTE crc_num[] = {0x49,0x48,0x44,0x52,0x00,0x00,0x00,0xC8,0x00, 0x00,0x00,0x96,0x08,0x03,0x00,0x00, 0x00};
//printf("%d\n", (int)crc_test(0xb3));
result = crc_test(crc_num, sizeof(crc_num));
printf("0x%x\n", (int)result);
return 0;
}
CRC32 crc_test(BYTE *crc, int len)
{
int i, lens;
CRC32 crc_t = 0, current;
for (lens=0; lens<len; lens++)
{
current = crc[lens] << 32;
for (i=0; i<8; i++)
{
if ( (CRC32)(current ^ crc_t) < 0 )
{
crc_t = (crc_t<<1) ^ POLY;
}
else{
crc_t <<= 1;
}
if ( (*crc) & i )
{
crc_t ^= POLY;
}
current <<= 1;
}
}
return crc;
}
由0x49,0x48,0x44,0x52,0x00,0x00,0x00,0xC8,0x00, 0x00,0x00,0x96,0x08,0x03,0x00,0x00, 0x00得出的
crc码,正确的应该是:AC 02 37 2B
我的计算 错啦 不过位数一样 求教!!~~