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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 58, средняя оценка - 4.91
VladimirU
125 / 103 / 18
Регистрация: 14.02.2013
Сообщений: 782
#1

Алгоритм вычисления CRC-8 - C++

17.02.2014, 21:43. Просмотров 9776. Ответов 19
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
unsigned short crc8 (unsigned short *ptr, unsigned short size )
{
unsigned short sum=0;
while(size>0)
{
sum+=ptr[size--];
sum += (sum >>1);
}
return(~sum);
}
Можно ли этот способ применить для вычисления crc8.?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2014, 21:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Алгоритм вычисления CRC-8 (C++):

Составить блок-схему, алгоритм вычисления и программу для вычисления значения кусочно заданной функции - C++
помогите пожалуйста =) заранее благодарен =) П.5.19.Правил Запрещено создавать темы в виде ссылок на задания или коды программ,...

алгоритм вычисления - C++
Дано натуральное число n и действительное число x. Вычислить 1/x+1/(x*(x+1))+...+1/(x*(x+1)*...*(x+n))

алгоритм вычисления - C++
Нужна ваша помощь, не могу разобраться c заданием. Заранее спасибо. "Добавить к программе алгоритм вычисления суммы последовательности...

Алгоритм вычисления времени - C++
Друзья,подскажите алгоритм для программы с помощью которого можно было бы вычислить количество лет,месяцев,дней,часов,минут и секунд от...

Алгоритм вычисления функции - C++
Помогите пожалуйста, составить алгоритм вычисления функции: P.S. очень извиняюсь за картинку вместо текста, но не знаю как это правильно...

Алгоритм вычисления значения n! - C++
рекурсивный алгоритм вычисления значения n! Постройте рекуррентное соотношение для количества основных операций. рекурсию то я...

19
DrOffset
7315 / 4415 / 1000
Регистрация: 30.01.2014
Сообщений: 7,252
17.02.2014, 23:38 #2
Цитата Сообщение от VladimirU Посмотреть сообщение
Можно ли этот способ применить для вычисления crc8.?
Не очень это похоже на crc. Может быть не весь код приведен, но пока мимо.
Я бы предложил вот такое решение:
C++
1
2
3
4
5
6
7
uint8_t crc8(const uint8_t (&table)[256], uint8_t *pdata, size_t nbytes, uint8_t crc)
{
    while (nbytes-- > 0)
        crc = table[(crc ^ *pdata++) & 0xff];
 
    return crc;
}
где pdata, nbytes входная последовательность и ее размер
crc - начальное значение (например 0xFF)
table - таблица crc8 рассчитанная по одному из полиномов (см. теорию)
CRC8_TABLE_SIZE = 256

Таблицу можно найти в инете или сгенерировать самому.
Пример функции генерации таблицы (MSB вариант):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void crc8_generate_table(uint8_t (&table)[CRC8_TABLE_SIZE], uint8_t poly)
{
    const uint8_t msbit = 0x80;
    table[0] = 0;
 
    uint8_t t = msbit;
    for (int i = 1; i < CRC8_TABLE_SIZE; i *= 2)
    {
        t = (t << 1) ^ (t & msbit ? poly: 0);
        for (int j = 0; j < i; ++j)
            table[i+j] = table[j] ^ t;
    }
}
0
VladimirU
125 / 103 / 18
Регистрация: 14.02.2013
Сообщений: 782
18.02.2014, 19:08  [ТС] #3
DrOffset, мне бы таблицу применять не хотелось из за ограничении памяти хранения программы.
А вот такой подход может являться расчётом crc:

"Для примера рассчитаем контрольную сумму нескольких 8-битных слов: 0x39, 0xf8, 0x14, 0xc2. Находим их сумму с поразрядным дополнением:
0x39 + 0xf8 = 0x131 → 0x31 ;
0x31 + 0x14 = 0x046 → 0x46 ;
0x46 + 0xc2 = 0x108 → 0x08 .
Теперь находим поразрядное дополнение до единицы полученного результата:
0x08 = 0000 1000 → 1111 0111 = 0xf7 или, проще — 0xff − 0x08 = 0xf7. Это и есть искомая контрольная сумма."
0
DrOffset
7315 / 4415 / 1000
Регистрация: 30.01.2014
Сообщений: 7,252
18.02.2014, 19:42 #4
Цитата Сообщение от VladimirU Посмотреть сообщение
"Для примера рассчитаем контрольную сумму нескольких 8-битных слов: 0x39, 0xf8, 0x14, 0xc2. Находим их сумму с поразрядным дополнением:
0x39 + 0xf8 = 0x131 → 0x31 ;
0x31 + 0x14 = 0x046 → 0x46 ;
0x46 + 0xc2 = 0x108 → 0x08 .
Теперь находим поразрядное дополнение до единицы полученного результата:
0x08 = 0000 1000 → 1111 0111 = 0xf7 или, проще — 0xff − 0x08 = 0xf7. Это и есть искомая контрольная сумма."
CRC - это Cyclic redundancy check. Всего лишь один из вариантов расчета контрольной суммы. Контрольную сумму можно считать разными алгоритмами, не обязательно CRC. А твой алгоритм, я так понимаю, это контрольная сумма для UDP пакета? Если да, то можно использовать, конечно же. Но только это не CRC.
1
VladimirU
125 / 103 / 18
Регистрация: 14.02.2013
Сообщений: 782
18.02.2014, 20:55  [ТС] #5
Понял.
Да точно мне надо контрольную сумму пяти 8-ми битных чисел.
Спс за помощь.
0
AndreyHABL
0 / 0 / 0
Регистрация: 20.09.2016
Сообщений: 6
20.09.2016, 08:38 #6
Здравствуйте заранее извиняюсь может за глупую просьбу
Не могли бы помочь с написанием програмки вычисления CRC8 табличным методом из введенного числа
я слепил програмку но что то сам в ней запутался

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
const unsigned char Crc8Table[256] = {
    0x00, 0x31, 0x62, 0x53, 0xC4, 0xF5, 0xA6, 0x97,
    0xB9, 0x88, 0xDB, 0xEA, 0x7D, 0x4C, 0x1F, 0x2E,
    0x43, 0x72, 0x21, 0x10, 0x87, 0xB6, 0xE5, 0xD4,
    0xFA, 0xCB, 0x98, 0xA9, 0x3E, 0x0F, 0x5C, 0x6D,
    0x86, 0xB7, 0xE4, 0xD5, 0x42, 0x73, 0x20, 0x11,
    0x3F, 0x0E, 0x5D, 0x6C, 0xFB, 0xCA, 0x99, 0xA8,
    0xC5, 0xF4, 0xA7, 0x96, 0x01, 0x30, 0x63, 0x52,
    0x7C, 0x4D, 0x1E, 0x2F, 0xB8, 0x89, 0xDA, 0xEB,
    0x3D, 0x0C, 0x5F, 0x6E, 0xF9, 0xC8, 0x9B, 0xAA,
    0x84, 0xB5, 0xE6, 0xD7, 0x40, 0x71, 0x22, 0x13,
    0x7E, 0x4F, 0x1C, 0x2D, 0xBA, 0x8B, 0xD8, 0xE9,
    0xC7, 0xF6, 0xA5, 0x94, 0x03, 0x32, 0x61, 0x50,
    0xBB, 0x8A, 0xD9, 0xE8, 0x7F, 0x4E, 0x1D, 0x2C,
    0x02, 0x33, 0x60, 0x51, 0xC6, 0xF7, 0xA4, 0x95,
    0xF8, 0xC9, 0x9A, 0xAB, 0x3C, 0x0D, 0x5E, 0x6F,
    0x41, 0x70, 0x23, 0x12, 0x85, 0xB4, 0xE7, 0xD6,
    0x7A, 0x4B, 0x18, 0x29, 0xBE, 0x8F, 0xDC, 0xED,
    0xC3, 0xF2, 0xA1, 0x90, 0x07, 0x36, 0x65, 0x54,
    0x39, 0x08, 0x5B, 0x6A, 0xFD, 0xCC, 0x9F, 0xAE,
    0x80, 0xB1, 0xE2, 0xD3, 0x44, 0x75, 0x26, 0x17,
    0xFC, 0xCD, 0x9E, 0xAF, 0x38, 0x09, 0x5A, 0x6B,
    0x45, 0x74, 0x27, 0x16, 0x81, 0xB0, 0xE3, 0xD2,
    0xBF, 0x8E, 0xDD, 0xEC, 0x7B, 0x4A, 0x19, 0x28,
    0x06, 0x37, 0x64, 0x55, 0xC2, 0xF3, 0xA0, 0x91,
    0x47, 0x76, 0x25, 0x14, 0x83, 0xB2, 0xE1, 0xD0,
    0xFE, 0xCF, 0x9C, 0xAD, 0x3A, 0x0B, 0x58, 0x69,
    0x04, 0x35, 0x66, 0x57, 0xC0, 0xF1, 0xA2, 0x93,
    0xBD, 0x8C, 0xDF, 0xEE, 0x79, 0x48, 0x1B, 0x2A,
    0xC1, 0xF0, 0xA3, 0x92, 0x05, 0x34, 0x67, 0x56,
    0x78, 0x49, 0x1A, 0x2B, 0xBC, 0x8D, 0xDE, 0xEF,
    0x82, 0xB3, 0xE0, 0xD1, 0x46, 0x77, 0x24, 0x15,
    0x3B, 0x0A, 0x59, 0x68, 0xFF, 0xCE, 0x9D, 0xAC
};
 
unsigned char Crc8(unsigned char pcBlock, unsigned char len)
{
    unsigned char crc = 0x00;
 
    while (len-->0)
        crc = Crc8Table[crc ^ pcBlock++];
 
    return crc;
}
 
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
int pcBlock,len=1, s;
scanf ( "%d", &pcBlock );
s=Crc8( pcBlock,  len);
    printf( "Summa %x\n ravno %x\n", len, s );
    return 0;
}
0
HighPredator
5541 / 1854 / 346
Регистрация: 10.12.2010
Сообщений: 5,470
Записей в блоге: 2
20.09.2016, 09:14 #7
AndreyHABL, а вы основы языка вообще знаете? Вы именно что "слепили" программу. Там где надо массив принять, вы принимаете байт, который по факту инт... Код самой функции вообще не соответствует тому, что в посте выше... Подтягивайте азы.
0
AndreyHABL
0 / 0 / 0
Регистрация: 20.09.2016
Сообщений: 6
22.09.2016, 06:45 #8
Пробовал так :

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
const unsigned char Crc8Table[256] = {
    0x00, 0x31, 0x62, 0x53, 0xC4, 0xF5, 0xA6, 0x97,
    0xB9, 0x88, 0xDB, 0xEA, 0x7D, 0x4C, 0x1F, 0x2E,
    0x43, 0x72, 0x21, 0x10, 0x87, 0xB6, 0xE5, 0xD4,
    0xFA, 0xCB, 0x98, 0xA9, 0x3E, 0x0F, 0x5C, 0x6D,
    0x86, 0xB7, 0xE4, 0xD5, 0x42, 0x73, 0x20, 0x11,
    0x3F, 0x0E, 0x5D, 0x6C, 0xFB, 0xCA, 0x99, 0xA8,
    0xC5, 0xF4, 0xA7, 0x96, 0x01, 0x30, 0x63, 0x52,
    0x7C, 0x4D, 0x1E, 0x2F, 0xB8, 0x89, 0xDA, 0xEB,
    0x3D, 0x0C, 0x5F, 0x6E, 0xF9, 0xC8, 0x9B, 0xAA,
    0x84, 0xB5, 0xE6, 0xD7, 0x40, 0x71, 0x22, 0x13,
    0x7E, 0x4F, 0x1C, 0x2D, 0xBA, 0x8B, 0xD8, 0xE9,
    0xC7, 0xF6, 0xA5, 0x94, 0x03, 0x32, 0x61, 0x50,
    0xBB, 0x8A, 0xD9, 0xE8, 0x7F, 0x4E, 0x1D, 0x2C,
    0x02, 0x33, 0x60, 0x51, 0xC6, 0xF7, 0xA4, 0x95,
    0xF8, 0xC9, 0x9A, 0xAB, 0x3C, 0x0D, 0x5E, 0x6F,
    0x41, 0x70, 0x23, 0x12, 0x85, 0xB4, 0xE7, 0xD6,
    0x7A, 0x4B, 0x18, 0x29, 0xBE, 0x8F, 0xDC, 0xED,
    0xC3, 0xF2, 0xA1, 0x90, 0x07, 0x36, 0x65, 0x54,
    0x39, 0x08, 0x5B, 0x6A, 0xFD, 0xCC, 0x9F, 0xAE,
    0x80, 0xB1, 0xE2, 0xD3, 0x44, 0x75, 0x26, 0x17,
    0xFC, 0xCD, 0x9E, 0xAF, 0x38, 0x09, 0x5A, 0x6B,
    0x45, 0x74, 0x27, 0x16, 0x81, 0xB0, 0xE3, 0xD2,
    0xBF, 0x8E, 0xDD, 0xEC, 0x7B, 0x4A, 0x19, 0x28,
    0x06, 0x37, 0x64, 0x55, 0xC2, 0xF3, 0xA0, 0x91,
    0x47, 0x76, 0x25, 0x14, 0x83, 0xB2, 0xE1, 0xD0,
    0xFE, 0xCF, 0x9C, 0xAD, 0x3A, 0x0B, 0x58, 0x69,
    0x04, 0x35, 0x66, 0x57, 0xC0, 0xF1, 0xA2, 0x93,
    0xBD, 0x8C, 0xDF, 0xEE, 0x79, 0x48, 0x1B, 0x2A,
    0xC1, 0xF0, 0xA3, 0x92, 0x05, 0x34, 0x67, 0x56,
    0x78, 0x49, 0x1A, 0x2B, 0xBC, 0x8D, 0xDE, 0xEF,
    0x82, 0xB3, 0xE0, 0xD1, 0x46, 0x77, 0x24, 0x15,
    0x3B, 0x0A, 0x59, 0x68, 0xFF, 0xCE, 0x9D, 0xAC
};
unsigned char Crc8(unsigned char *pcBlock, unsigned char len)
{
    unsigned char crc = 0xFF;
 
    while (len--)
        crc = Crc8Table[crc ^ *pcBlock++];
 
    return crc;
}
 
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
char *pcBlock,len, s;
s=Crc8(pcBlock, len);
    printf( "Summa %x\n ravno %x\n", len, s );
    return 0;
}
выдаёт ошибку, функция взята из википедии.
Алгоритм следующий: есть какое либо сообщение например введенное с клавиатуры цифрами 16777133 (десятичное), далее надо каким то образом взять первые 8 бит с этих данных в нашем случае это 11111111 принять это за адрес в нашем массиве. Данные что по этому адресу (в нашем случае это AC(10101100)) надо ксорить (XOR) со вторыми 8ми битами нашего сообщения (в нашем случае это тоже FF). Полученный результат (в нашем случае это 01010011) это новый адрес в нашем массиве. Данные что по этому адресу (в нашем случае это 2d(00101101)) надо ксорить (XOR) уже с третьими 8ми битами нашего сообщения (в нашем случае это AD). Так должно продолжаться пока не кончится сообщение, в нашем случае оно кончается. Результат и будет контрольная сумма CRC8.
0
HighPredator
5541 / 1854 / 346
Регистрация: 10.12.2010
Сообщений: 5,470
Записей в блоге: 2
22.09.2016, 08:05 #9
AndreyHABL, повторюсь еще раз: вам нужно взять книгу и изучать азы, а не контрольную сумму считать. Конечно будет выдавать ошибки, вы даже не в курсе, что переменные перед использованием нужно инициализировать. Вам повезло, что такой тяп-ляп слепленый код вообще скомпилировался. Не всем так прет. Короче, изучайте язык ибо на данном этапе обсуждать что-то предметно не имеет смысла.
0
nmcf
5324 / 4644 / 1553
Регистрация: 14.04.2014
Сообщений: 18,479
22.09.2016, 09:35 #10
AndreyHABL, ты сначала введи строку или задай константой, после уже вычисляй.
0
DrOffset
22.09.2016, 12:58
  #11

Не по теме:

Цитата Сообщение от HighPredator Посмотреть сообщение
Не всем так прет.
Мне кажется, если кривой код скомпилировался, то это скорее невезение, чем везение.

0
AndreyHABL
0 / 0 / 0
Регистрация: 20.09.2016
Сообщений: 6
25.09.2016, 08:05 #12
Вот всё поправил:
Assembler
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
const unsigned char Crc8Table[256] = {
    0x00, 0x31, 0x62, 0x53, 0xC4, 0xF5, 0xA6, 0x97,
    0xB9, 0x88, 0xDB, 0xEA, 0x7D, 0x4C, 0x1F, 0x2E,
    0x43, 0x72, 0x21, 0x10, 0x87, 0xB6, 0xE5, 0xD4,
    0xFA, 0xCB, 0x98, 0xA9, 0x3E, 0x0F, 0x5C, 0x6D,
    0x86, 0xB7, 0xE4, 0xD5, 0x42, 0x73, 0x20, 0x11,
    0x3F, 0x0E, 0x5D, 0x6C, 0xFB, 0xCA, 0x99, 0xA8,
    0xC5, 0xF4, 0xA7, 0x96, 0x01, 0x30, 0x63, 0x52,
    0x7C, 0x4D, 0x1E, 0x2F, 0xB8, 0x89, 0xDA, 0xEB,
    0x3D, 0x0C, 0x5F, 0x6E, 0xF9, 0xC8, 0x9B, 0xAA,
    0x84, 0xB5, 0xE6, 0xD7, 0x40, 0x71, 0x22, 0x13,
    0x7E, 0x4F, 0x1C, 0x2D, 0xBA, 0x8B, 0xD8, 0xE9,
    0xC7, 0xF6, 0xA5, 0x94, 0x03, 0x32, 0x61, 0x50,
    0xBB, 0x8A, 0xD9, 0xE8, 0x7F, 0x4E, 0x1D, 0x2C,
    0x02, 0x33, 0x60, 0x51, 0xC6, 0xF7, 0xA4, 0x95,
    0xF8, 0xC9, 0x9A, 0xAB, 0x3C, 0x0D, 0x5E, 0x6F,
    0x41, 0x70, 0x23, 0x12, 0x85, 0xB4, 0xE7, 0xD6,
    0x7A, 0x4B, 0x18, 0x29, 0xBE, 0x8F, 0xDC, 0xED,
    0xC3, 0xF2, 0xA1, 0x90, 0x07, 0x36, 0x65, 0x54,
    0x39, 0x08, 0x5B, 0x6A, 0xFD, 0xCC, 0x9F, 0xAE,
    0x80, 0xB1, 0xE2, 0xD3, 0x44, 0x75, 0x26, 0x17,
    0xFC, 0xCD, 0x9E, 0xAF, 0x38, 0x09, 0x5A, 0x6B,
    0x45, 0x74, 0x27, 0x16, 0x81, 0xB0, 0xE3, 0xD2,
    0xBF, 0x8E, 0xDD, 0xEC, 0x7B, 0x4A, 0x19, 0x28,
    0x06, 0x37, 0x64, 0x55, 0xC2, 0xF3, 0xA0, 0x91,
    0x47, 0x76, 0x25, 0x14, 0x83, 0xB2, 0xE1, 0xD0,
    0xFE, 0xCF, 0x9C, 0xAD, 0x3A, 0x0B, 0x58, 0x69,
    0x04, 0x35, 0x66, 0x57, 0xC0, 0xF1, 0xA2, 0x93,
    0xBD, 0x8C, 0xDF, 0xEE, 0x79, 0x48, 0x1B, 0x2A,
    0xC1, 0xF0, 0xA3, 0x92, 0x05, 0x34, 0x67, 0x56,
    0x78, 0x49, 0x1A, 0x2B, 0xBC, 0x8D, 0xDE, 0xEF,
    0x82, 0xB3, 0xE0, 0xD1, 0x46, 0x77, 0x24, 0x15,
    0x3B, 0x0A, 0x59, 0x68, 0xFF, 0xCE, 0x9D, 0xAC
};
unsigned char Crc8(unsigned char pcBlock, unsigned char len)
{
    unsigned char crc = 0x00;
 
    while (len--)
        crc = Crc8Table[crc ^ pcBlock++];       
 
    return crc;
}
 
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
char pcBlock=0xffff,len=2;
char s;
s=Crc8(pcBlock, len);
    printf( "Summa %x\n ravno %x\n", len, s );
    return 0;
}
считает но не правильно, почему то не сдвигает данные и pcBlock++ после первого раза принимает за 0
0
ValeryS
Модератор
6653 / 5062 / 470
Регистрация: 14.02.2011
Сообщений: 16,926
25.09.2016, 08:35 #13
Цитата Сообщение от AndreyHABL Посмотреть сообщение
char pcBlock=0xffff
говорят же, почитай книги
char никак не может быть 16 бит

Не по теме:

теоретически может но это тема для отдельного разговора

0
nmcf
5324 / 4644 / 1553
Регистрация: 14.04.2014
Сообщений: 18,479
25.09.2016, 09:02 #14
C++
1
unsigned char pcBlock[2] = {0xff, 0xff}, len = 2;
0
AndreyHABL
0 / 0 / 0
Регистрация: 20.09.2016
Сообщений: 6
25.09.2016, 10:11 #15
а так ?
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
const unsigned char Crc8Table[256] = {
    0x00, 0x31, 0x62, 0x53, 0xC4, 0xF5, 0xA6, 0x97,
    0xB9, 0x88, 0xDB, 0xEA, 0x7D, 0x4C, 0x1F, 0x2E,
    0x43, 0x72, 0x21, 0x10, 0x87, 0xB6, 0xE5, 0xD4,
    0xFA, 0xCB, 0x98, 0xA9, 0x3E, 0x0F, 0x5C, 0x6D,
    0x86, 0xB7, 0xE4, 0xD5, 0x42, 0x73, 0x20, 0x11,
    0x3F, 0x0E, 0x5D, 0x6C, 0xFB, 0xCA, 0x99, 0xA8,
    0xC5, 0xF4, 0xA7, 0x96, 0x01, 0x30, 0x63, 0x52,
    0x7C, 0x4D, 0x1E, 0x2F, 0xB8, 0x89, 0xDA, 0xEB,
    0x3D, 0x0C, 0x5F, 0x6E, 0xF9, 0xC8, 0x9B, 0xAA,
    0x84, 0xB5, 0xE6, 0xD7, 0x40, 0x71, 0x22, 0x13,
    0x7E, 0x4F, 0x1C, 0x2D, 0xBA, 0x8B, 0xD8, 0xE9,
    0xC7, 0xF6, 0xA5, 0x94, 0x03, 0x32, 0x61, 0x50,
    0xBB, 0x8A, 0xD9, 0xE8, 0x7F, 0x4E, 0x1D, 0x2C,
    0x02, 0x33, 0x60, 0x51, 0xC6, 0xF7, 0xA4, 0x95,
    0xF8, 0xC9, 0x9A, 0xAB, 0x3C, 0x0D, 0x5E, 0x6F,
    0x41, 0x70, 0x23, 0x12, 0x85, 0xB4, 0xE7, 0xD6,
    0x7A, 0x4B, 0x18, 0x29, 0xBE, 0x8F, 0xDC, 0xED,
    0xC3, 0xF2, 0xA1, 0x90, 0x07, 0x36, 0x65, 0x54,
    0x39, 0x08, 0x5B, 0x6A, 0xFD, 0xCC, 0x9F, 0xAE,
    0x80, 0xB1, 0xE2, 0xD3, 0x44, 0x75, 0x26, 0x17,
    0xFC, 0xCD, 0x9E, 0xAF, 0x38, 0x09, 0x5A, 0x6B,
    0x45, 0x74, 0x27, 0x16, 0x81, 0xB0, 0xE3, 0xD2,
    0xBF, 0x8E, 0xDD, 0xEC, 0x7B, 0x4A, 0x19, 0x28,
    0x06, 0x37, 0x64, 0x55, 0xC2, 0xF3, 0xA0, 0x91,
    0x47, 0x76, 0x25, 0x14, 0x83, 0xB2, 0xE1, 0xD0,
    0xFE, 0xCF, 0x9C, 0xAD, 0x3A, 0x0B, 0x58, 0x69,
    0x04, 0x35, 0x66, 0x57, 0xC0, 0xF1, 0xA2, 0x93,
    0xBD, 0x8C, 0xDF, 0xEE, 0x79, 0x48, 0x1B, 0x2A,
    0xC1, 0xF0, 0xA3, 0x92, 0x05, 0x34, 0x67, 0x56,
    0x78, 0x49, 0x1A, 0x2B, 0xBC, 0x8D, 0xDE, 0xEF,
    0x82, 0xB3, 0xE0, 0xD1, 0x46, 0x77, 0x24, 0x15,
    0x3B, 0x0A, 0x59, 0x68, 0xFF, 0xCE, 0x9D, 0xAC
};
unsigned char Crc8(unsigned char pcBlock, unsigned char len)
{
    unsigned char crc = 0x00;
 
    while (len--)
        crc = Crc8Table[crc ^ pcBlock++];       
        
    return crc;
}
 
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
int pcBlock=0xffff,len=2;
int s;
s=Crc8(pcBlock, len);
    printf( "Summa %x\n ravno %x\n", len, s );
    return 0;
}
как сдвигать сообщение по 8 бит?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2016, 10:11
Привет! Вот еще темы с ответами:

Алгоритм для вычисления выражения - C++
Помогите,пожалуйста, составить алгоритм. Зарание спасибо.

Составить алгоритм вычисления выражения - C++
Составить алгоритм вычисления следующей функции F=\sum_{i=1}^{n}\left(x_i+a^n \right)+b^m+\sum_{i=1}^{m}\left(y_i+b^4...

Реализавать алгоритм вычисления подходящих дробей - C++
Помогите пожалуйста написать программу. Необходима реализация алгоритма вычисления подходящих дробей.

Алгоритм вычисления дня недели по дате - C++
Посдкажите алгоритм вычисления дня недели по дате( день, месяц, год). int a = (14 - month)/12; int y = year - a; int m = month +...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
25.09.2016, 10:11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru