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

Найти crc16 для числа - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить произведение элементов, кратных трём, в указанном столбце заданной матрицы http://www.cyberforum.ru/cpp-beginners/thread1722668.html
вроде все правильно но результат не выводится #include <iostream> #include <time.h> #include <stdlib.h> #include <math.h> using namespace std; int main (){ setlocale(LC_ALL, "Russian");
C++ Двумерный массив. Указанные элементы первой и второй строк обменять местами Здравствуйте. Имеется задание: обменять местами введенные с клавиатуры элементы первой и второй строк, то есть два каких-то определенных элемента (двумерный массив). Кто сможет помочь с алгоритмом? http://www.cyberforum.ru/cpp-beginners/thread1722666.html
C++ СРОЧНО по С++ , написать программу , пожалуйста
Дано масив розміром 4x4 з елементами цілого типу. Написати програму для обчислення добутку додатних елементів масиву. Обчислення цього добутку оформити у вигляді функції. П1.4. Правил Официальными языками форума являются русский и английский языки. Размещение сообщений на других языках запрещено. П5.4. Правил Запрещено создавать темы с бессмысленными названиями вроде "Помогите!", "Вопрос" и...
C++ Программа которая ищет IP адресов домена С ++
Привет. Помогите очень очень нужно написать программу. Программа должна пропинговать определенный адрес (например google.com), найти IP адрес сервера, ответ которого будет с наименьшей задержкой, например использовать команды ping, nslookup как в командной строке (cmd) На вход мы вводим домен ... например google.сom Если же наш домен выдаст несколько IP то мы ищем пинг до сих IP...
C++ Замена элемента одномерного массива http://www.cyberforum.ru/cpp-beginners/thread1722637.html
Привет, помоги мне человечище написать одну маленькую функцию замены второго отрицательного элемента минимальным #include<iostream> using namespace std; int input()//Ввод размера массива { int n; cout<<"Введите размер массива:"; cin>>n;
C++ О многопоточности Интересно, стало, а сколько всего потоков я могу открыть в своем проекте, существуют ли какие нибудь ограничения? и от чего зависит скорость работы каждого из этих потоков, ну то есть сколько потоков должно быть в проекте, чтобы дальнейшее их создание не приносило пользы. ну и по традиции код с замерами оставлю=) #include <iostream> #include <thread> #include <time.h> void BableSort(int... подробнее

Показать сообщение отдельно
max_1296
0 / 0 / 2
Регистрация: 19.08.2013
Сообщений: 71

Найти crc16 для числа - C++

27.04.2016, 21:53. Просмотров 203. Ответов 1
Метки (Все метки)

добрый вечер, стоит следующая задача:
CRC-16.
Образующий полином: x16 + x15 + x2 + 1
Вводится исходное сообщение М (произвольное десятичное число). Переводится в
двоичный формат. Кодируется.
Случайным образом допускается от 0 до 2 ошибок, декодируется с обнаружением
ошибки.

пытался реализовать по этому описанию алгоритма:
Простой алгоритм расчёта CRC выполняется следующим образом:
1. В регистр CRC заносится начальное значение FFFFh.
2. В конец сообщения добавляется W нулевых битов
3. Содержимое регистра сдвигается влево на 1 бит, и в последнюю (нулевую) позицию заносится очередной, ещё не обработанный бит данных.
4. Если из регистра был выдвинут бит со значением "1", то содержимое регистра комбинируется по XOR с полиномом. Если значение бита равно "0", XOR не выполняется.
5. Шаги 3 и 4 выполняются, пока не будут обработаны все данные.
6. Окончательное содержимое регистра комбинируется по XOR со значением FFFFh.

функция которая у меня получилась(работает неправильно)
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
int reg = 0xFFFF;
int pole = 0x8005; //x16 + x15 + x2 + 1
 
int crc(int m)
{
m = m << 16;//не знаю как добавить 16 нулей, нужна 6байтная int, просто сдвигаю чтобы работало для маленьких чисел
    for (int i = 0; i < 32; i++) //
    {
        if (reg & 128)
        {
            reg = reg << 1;
            reg = reg & 0x0000FFFF;//выкидываю все что вылезло за два байта, не знаю надо это или нет
            reg += (m & 128)>>31;
            m = m << 1;         
            reg = reg ^ pole;
        }else
            {
            reg = reg << 1;
            reg = reg & 0x0000FFFF;
            reg +=( m & 128)>>31;
            m = m << 1;         
            }
        }
    reg = reg ^ 0xFFFF;
    return(reg);    
}
помогите поправить код, и натолкните на мысль реализации вот этой части- Случайным образом допускается от 0 до 2 ошибок, декодируется с обнаружением

Добавлено через 1 час 14 минут
немного поработал над кодом, пришел к выводу что вот так лучше, но выдает всегда один и тот же результат что при 0 что при большом числе
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
int reg = 0xFFFF;
int pole = 0x8005; //x16 + x15 + x2 + 1
int crc(int m)
{
 
    m = m << 16;
    for (int i = 0; i < 32; i++)
    {
        if (reg && 128)
        {
            reg = reg << 1;
            reg = reg && 0x0000FFFF;
            reg += m >>31;
            m = m << 1;
            reg = reg ^ pole;
        }else
            {
            reg = reg << 1;
            reg = reg && 0x0000FFFF;
            reg += m >>31;
            m = m << 1;
            }
        }
    reg = reg ^ 0xFFFF;
    return(reg);    
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru