RFC: 1071
Оригинал: Computing the Internet Checksum
Категория: Не определено
Дата публикации:
Авторы: , ,
Перевод: Николай Малых

RFC 1071, Страница 5 из 9

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;
}
2007 - 2017 © Русские переводы RFC, IETF, ISOC.