/*
* @param1: ucBuf
* @param1: uiLen
* @param1: uiSeed
*/
uint32_t CheckCrc32WithInitial(uint8_t *ucBuf, uint32_t uiLen, uint32_t uiSeed)
{
uint32_t crc = uiSeed;/*0x00000000;*/
if (NULL == ucBuf || uiLen <= 0)
{
return crc;
}
uint8_t *ucOld = ucBuf;
uint32_t rem = uiLen % sizeof(unsigned int);
if (rem > 0) {
int n = sizeof(unsigned int) - rem;
for (int i = 0; i < n; i ++) {
ucOld[uiLen+i] = 0xff;
}
uiLen += n;
}
uint32_t uiCount = uiLen/sizeof(unsigned int);
for (uint32_t i = 0; i < uiCount; i ++) {
uint32_t uiTemp = *(uint32_t *)ucOld;
for (uint32_t j = 0; j < 32; j ++) {
if ((crc^uiTemp) & 0x80000000) {
crc = 0x04C11DB7^(crc<<1);
} else {
crc <<= 1;
}
uiTemp <<= 1;
}
ucOld += sizeof(unsigned int);
}
return crc;
}
32位CRC校驗代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.