【发布时间】:2012-09-28 00:37:50
【问题描述】:
我正在尝试为 12 位 CRC 和算法做 crc_table,但总是得到错误的结果。
你能帮帮我吗?要创建 crc 表,我尝试:
void crcInit(void)
{
unsigned short remainder;
int dividend;
unsigned char bit;
for (dividend = 0; dividend < 256; ++dividend)
{
remainder = dividend << 4;
for (bit = 8; bit > 0; --bit)
{
if (remainder & 0x800)
{
remainder = (remainder << 1) ^ 0x180D; //Polynomio of CRC-12
}
else
{
remainder = (remainder << 1);
}
}
crcTable[dividend] = remainder;
}
}
我更新了,CRC算法是:
unsigned short crcFast(unsigned char const message[], int nBytes)
{
unsigned short remainder = 0x0000;
unsigned char data;
int byte;
/*
* Divide the message by the polynomial, a byte at a time.
*/
for (byte = 0; byte < nBytes; ++byte)
{
data = message[byte] ^ (remainder >> 4);
remainder = crcTable[data] ^ (remainder << 8);
}
/*
* The final remainder is the CRC.
*/
return (remainder ^ 0);
}
但它不起作用.....
【问题讨论】:
-
这是来自 UIUC CS438 MP1 吗?我在同一个班。 :)
-
请记住,有三种算法自称为 CRC-12。因此,请确保您正在为您的目的实施正确的。其他常见的多项式是:0x180B 和 0x180F。还要检查初始值和最终 XOR 值。