c1c2c3c4..cqm1m2m3m4m5...mk)t1t2t3t4t5t6.....tnc1(m1m2m3m4m5m6..mk)c2(m1m2m3m4m5m6..mk)c3(m1m2m3m4m5m6..mk)c4(m1m2m3m4m5m6..mk)..................cq(m1m2m3m4m5m6..mk)
代码实现的条件是假定系统DWORD的存储方式是小端存储。
typedef unsigned long DWORD;
DWORD dwPolynomial = 0x04c11db7;
DWORD cal_crc(DWORD *ptr, int len)
{
DWORD xbit;
DWORD data;
DWORD CRC = 0xFFFFFFFF; // init
int bits = 0;
while (len--) {
xbit = 1 << 31;
data = *ptr++;
for (bits = 0; bits < 32; bits++) {
if (CRC & 0x80000000) {
CRC <<= 1;
CRC ^= dwPolynomial;
}
else
CRC <<= 1;
if (data & xbit)
CRC ^= dwPolynomial;
xbit >>= 1;
}
}
return CRC;
}
int main()
{
DWORD data,result;
data = 0x31;
result = cal_crc(&data,1);
result = 0;
return 0;
}
联系客服