Я использую следующий C Algo для вычисления CRC32 по данным:CRC32 уже CRC32 обработанных данных с данными CRC добавляется
#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
Anybody имея представление о том, почему он ведет себя, как это?
Посмотрите здесь: http://www.danielvik.com/2010/10/calculating-reverse-crc.html, в частности, в разделе «Обращение crc». Он демонстрирует, как получить ЛЮБЫЙ желаемый CRC, добавив четыре байта в данные. –
thx очень много. Я обязательно присмотрюсь ближе – mrhpogie