Форум программистов, компьютерный форум CyberForum.ru

Циклические коды - C++

Восстановить пароль Регистрация
 
myxasa
14 / 14 / 1
Регистрация: 31.05.2012
Сообщений: 210
Записей в блоге: 2
21.11.2014, 21:01     Циклические коды #1
Для построение циклического кода (CRC) нужен образующий полином, который мы должны найти по таблице неприводимых многочленов(см. вложение).. Обычно народ тупо забивает в массив эти значения и радуется...

Я хочу сделать функцию генерации таких многочленов...(это вроде поля галуа и прочее.. хз).

Вот код генерации 32 битных многочленов

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#define POLYNOMIAL 0x04c11db7L      // CRC-32
void gen_crc_table(void)
{
    register word16 i, j;
    register word32 crc_accum;
 
    for (i=0;  i< 256;  i++)
    {
        crc_accum = ( (word32) i << 24 );
        for ( j = 0;  j < 8;  j++ )
        {
            if ( crc_accum & 0x80000000L )
            {
                crc_accum = (crc_accum << 1) ^ POLYNOMIAL;
            }
            else
            {
                crc_accum = (crc_accum << 1);
            }
        }
        crc_table[i] = crc_accum;
    }
}

Next is a list of CRC polynoms that I could find:
CCITT-32: 0x04C11DB7 = x32 + x26 + x23 + x22 + x16 + x12 +
x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1

CRC-16: 0x8005 = x16 + x15 + x2 + 1

CRC-CCITT: 0x1021 = x16 + x12 + x5 + 1

CRC-XMODEM: 0x8408 = x16 + x15 + x10 + x3

12bit-CRC: 0x80f = x12 + x11 + x3 + x2 + x + 1

10bit-CRC: 0x233 = x10 + x9 + x5 + x4 + x + 1

8bit-CRC: 0x07 = x8 + x2 + x + 1

Не могу понять, как этот заставить этот алгоритм генерить числа, которые в приложенной таблице ...
Миниатюры
Циклические коды  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2014, 21:01     Циклические коды
Посмотрите здесь:

Циклические операторы C++
С++ (циклические алгоритмы) C++
Циклические процессы на С++!!!!!!! C++
C++ Циклические алгоритмы.
C++ циклические процессы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
D_in_practice
 Аватар для D_in_practice
330 / 330 / 159
Регистрация: 02.10.2014
Сообщений: 666
21.11.2014, 22:51     Циклические коды #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
http://www.cyberforum.ru/cgi-bin/latex.cgi?{11}_{2} + {2}_{10} = {101}_{2}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{101}_{2} + {2}_{10} = {111}_{2}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{111}_{2} + {2}_{10} = {1001}_{2}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{1001}_{2} + {2}_{10} = {1011}_{2}
myxasa
14 / 14 / 1
Регистрация: 31.05.2012
Сообщений: 210
Записей в блоге: 2
21.11.2014, 23:33  [ТС]     Циклические коды #3
забавно) просто нужна внимательность )
D_in_practice
 Аватар для D_in_practice
330 / 330 / 159
Регистрация: 02.10.2014
Сообщений: 666
21.11.2014, 23:39     Циклические коды #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <cmath>
 
int main(){
    
    for(int i = 3; i <= 47; i += 2){//Г*Г*Г·ГЁГ*Г*Гї Г± 11 ГЁ äî .. ÷èñëî Г*Г°Г*ГўГЁГІГ±Гї
 
        int b = log2(i);
        int p = pow(2, b);
        for (int j = b; j >= 0; --j){
            if (i / p % 2 == 1){
                if (j != b)
                    std::cout << "+ ";
                if (j != 0){
                    std::cout << "x";               
                    if (j != 1)
                        std::cout << j << ' ';
                    else
                        std::cout << ' ';
                }else
                    std::cout << "1";
            }
            p /= 2;
        }
        std::cout << std::endl;
    }
}
Yandex
Объявления
21.11.2014, 23:39     Циклические коды
Ответ Создать тему
Опции темы

Текущее время: 23:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru