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;
}