Реализации алгоритмов/Циклический избыточный код: различия между версиями

Содержимое удалено Содержимое добавлено
оформление
Нет описания правки
Строка 308:
одинарных, двойных, тройных и всех нечетных ошибок
*/
unsigned short crc_ccitt_update (unsigned short crc, unsigned char data)
{
unsigned short t;
data ^= crc&255;
data ^= data << 4;
t = (((unsigned short)data << 8) | ((crc>>8)&255));
t ^= (unsigned char)(data >> 4);
t ^= ((unsigned short)data << 3);
return t;
}
Строка 849 ⟶ 850 :
unsigned int CRC32_function(unsigned char *buf, unsigned long len)
{
unsigned long crc_table[256];
unsigned long crc;
for (int i = 0; i < 256; i++)
{
crc = i;
for (int j = 0; j < 8; j++)
crc = crc & 1 ? (crc >> 1) ^ 0xEDB88320UL : crc >> 1;
crc_table[i] = crc;
};
crc = 0xFFFFFFFFUL;
while (len--)
crc = crc_table[(crc ^ *buf++) & 0xFF] ^ (crc >> 8);
return crc ^ 0xFFFFFFFFUL;
}
 
//возвращание конечного CRC32. Достаточно вызвать эту функцию и указать имя файла, для которого будет произведён расчёт
unsigned int CRC32_count(char* filename)
{
char buf[4096*64]; //сколько символов в файле, на самом деле, это должно быть больше, 2^31-1 будет для файла размером 2ГБ
ifstream f (filename,std::ios::binary);