【发布时间】:2015-06-30 07:31:54
【问题描述】:
我正在使用 16 位 CRC 并有一个查找表 (LUT) 生成器,它为给定的多项式生成 LUT。我使用的生成器代码使用 Koopman 表示法(例如 CCITT 的 0x8810),因此生成的第一个表行为:
0x0000, 0x8810, 0x9830, 0x1020, 0xB870, 0x3060, 0x2040, 0xA850,
我在互联网上找到了一个已经计算好的 CCITT 表,但它显然使用了不同的符号,第一行给出为:
0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
我的问题是:短符号和长符号(0x8810 与 0x11021)是否会在不同的表中产生相同的结果(即 LUT 的使用不同),或者在不同符号中使用相同多项式时 CRC 是否不同?
ps:据我所知,0x8810 和 0x11021 是未反射的 Koopman/“正常”符号,而 0x8408 和 0x10811 是反射的(对于 CCITT)
pps:第二张表的“使用代码”如下:
uint16_t crc16_block(uint16_t crc, uint8_t *data, int len){
int i;
for (i = 0; i < len; i++)
crc = (crc << 8) ^ crc16_tbl[(crc >> 8) ^ data[i]];
return crc;
}
【问题讨论】: