请告诉我我做的代码出了什么问题
void make_crc_table( void ) {
int i, j;
unsigned long poly, c;
poly = 0x03; // X^6 + x + 1
for ( i = 0; i < 256; i++ ) {
c = i >> 2;
for ( j = 0; j < 8; j++ ) {
c = ( c & 0x20 ) ? poly ^ ( c << 1 ) : ( c << 1 );
}
crctable[i] = (uint8_t) c;
}
} 谢谢你的帮助。
发布于 2022-09-02 03:46:36
您需要从字节的高位开始计算。去掉>> 2 (这只会导致四次相同的计算)。这样做是为了从高位数计算:
c = c & 0x80 ? (c << 1) ^ (poly << 2) : c << 1;然后当存钱时:
crctable[i] = (c >> 2) & 0x3f;不需要,但没有理由使用unsigned long,所以只需使用unsigned即可。
https://stackoverflow.com/questions/73577419
复制相似问题