4. Примеры реализации
Ниже приводятся примеры реализации алгоритма подсчета контрольных сумм Internet, которые доказали свою эффективность для разных типов CPU. В каждом случае приводится ядро алгоритма без включения дополнительного кода (например, свящывания подпрограмм).
4.1. Код на языке C
Приведенный ниже пример на языке C показывает расчет контрольной суммы с использованием внутреннего цикла сложения 16-битовых значений в 32-битовый «аккумулятор».
in 6 { /* Расчет контрольной суммы Internet для count байтов, * начиная с addr. */ register long sum = 0; while( count > 1 ) { /* Внутренний цикл */ sum += * (unsigned short) addr++; count -= 2; } /* Прибавляем байт переноса, если он есть */ if( count > 0 ) sum += * (unsigned char *) addr; /* поместим 32-битовую сумму в 16 битов */ while (sum>>16) sum = (sum & 0xffff) + (sum >> 16); checksum = ~sum; }