【发布时间】:2015-04-19 22:46:02
【问题描述】:
我使用以下 C 算法来计算数据的 CRC32:
#define CRC32_POLYNOM_REVERSED 0xEDB88320
uint32 calcCrc32(uint8* buffer, uint32 bufferSize) {
return accumulateCrc32(0, buffer, bufferSize);
}
uint32 accumulateCrc32(uint32 accumulatedCrc32, uint8* buffer, uint32 bufferSize) {
uint32 i, j;
uint32 crc, mask;
crc = accumulatedCrc32 ^ 0xFFFFFFFF;
for (i = 0; i < bufferSize; i++) {
crc ^= buffer[i];
for (j = 8; j > 0; j--) {
mask = -(crc & 1);
crc = (crc >> 1) ^ (CRC32_POLYNOM_REVERSED & mask);
}
}
return crc ^ 0xFFFFFFFF;
}
当我将它应用于任何数据并将生成的 4 个字节的 CRC32 连接到数据并再次通过该例程运行时,它总是以结果结束
crc32 = 0x2144DF1C
任何人有一个想法,为什么它会这样?
【问题讨论】:
-
看这里:danielvik.com/2010/10/calculating-reverse-crc.html,特别是在“reversing crc”部分。它演示了如何通过向数据附加四个字节来获得任何所需的 CRC。
-
非常感谢。我一定会仔细看看