CRC32算法详细推导(3) 郁闷的位逆转 看起来我们已经得到 CRC-32 算法的最终形式了,可是、可是在实际的应用中,数据传输时是低位先行的;对于一个字节 Byte 来讲,传输将是按照 b1,b2,...,b8 的顺序。而我们上面的算法是按照高位在前的约定,不管是 reg 还是 G(x) , g32,g31,...,g1 ; b8,b7,...,b1 ; r32,r31,...,r1 。 先来看看前面从 bit 转换到 Byte 一节中 for 循环的逻辑: sum_poly = reg&0xFF000000; for(int j = 0; j < 8; j++) { int hi = sum_poly&0x80000000; // 测试reg最高位 sum_poly <<= 1; if(hi) sum_poly = sum_poly^POLY; } // 计算步骤2 reg = (reg<<8)|p[i]; reg = reg ^ sum_poly; 在这里的计算中, p[i] 是按照 p8