Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
millworm
0 / 0 / 0
Регистрация: 27.04.2012
Сообщений: 74
1

Проверка контрольной суммы crc8

30.06.2016, 12:59. Просмотров 1011. Ответов 5
Метки crc, crc8 (Все метки)

народ, подскажите как сделать проверку контрольной суммы
допустим поступают байты: 170 7 0 0 7 102 230 96 68 115
0- синхробайт
1-длина пакета
2,3-зарезервированные
5-8 - данные
9- контрольная сумма
как это все проверяется?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2016, 12:59
Ответы с готовыми решениями:

Проверка контрольной суммы РНН
Добрый день, уважаемые читатели форума. Суть вопроса: РНН представляет...

Расчет контрольной суммы
Правильно ли я понимаю задание? Настройки com порта стандартные: 9600, 1...

Вычисление 8-и битных контрольной суммы
Доброго времени суток господа! Нужна ваша помощь. Есть функция на Си для...

Код по алгоритму. Расчет контрольной суммы
Помогите написать код по этому алгоритму. 1) Пользователь может выбрать...

Расчета контрольной суммы MD5 (хеширование)
Помогите с процедурой для , ___ где вопросительные знаки нужно вставить...

5
OwenGlendower
Супер-модератор
Эксперт .NET
9308 / 8170 / 3487
Регистрация: 17.03.2014
Сообщений: 16,206
Записей в блоге: 1
30.06.2016, 16:24 2
millworm, нужно знать а) какой вариант CRC8 здесь используется и б) для какой части пакета считается контрольная сумма. Зная это можно написать подсчет контрольной суммы или взять готовую реализацию.
0
millworm
0 / 0 / 0
Регистрация: 27.04.2012
Сообщений: 74
30.06.2016, 16:52  [ТС] 3
ну это вся информация, которая есть
я тут по сайтам с калькуляторами погулял (ссылка)
попробовал на одном вбить "AA0700000766e66044", т.е. все кроме контрольной суммы перевел в hex
и поставил crc init: 0xAA
и он выдал, вроде то что нужно "0x73"
только вот как это бы на c# сделать

Добавлено через 2 минуты
о, еще на одном попробовал
выбрал crc8_8h2f
и выдал, то что нужно
правда для других данных не выдал
AA070000011700c842 должно быть 9В, а получилось Е9
0
OwenGlendower
Супер-модератор
Эксперт .NET
9308 / 8170 / 3487
Регистрация: 17.03.2014
Сообщений: 16,206
Записей в блоге: 1
30.06.2016, 17:59 4
Лучший ответ Сообщение было отмечено millworm как решение

Решение

millworm, вот такая реализация дает правильный результат для обоих примеров
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
static class CRC8
{
    static byte[] CRC8_TABLE = new byte[]{
        0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,
        157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,
        35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,
        190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,
        70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,
        219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,
        101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,
        248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,
        140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,
        17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,
        175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,
        50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,
        202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,
        87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,
        233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,
        116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53
    };
    
    public static byte Calculate(byte[] data, byte init = 0)
    {
        byte result = init;
        for (var i=0; i<data.Length; i++)
        {
            result = CRC8_TABLE[result ^ data[i]];
        }
        return result;
    }
}
1
millworm
0 / 0 / 0
Регистрация: 27.04.2012
Сообщений: 74
30.06.2016, 18:38  [ТС] 5
благодарю, но что-то у меня никак не получается получить результат
что я делаю не так?
C#
1
2
3
4
5
            
var checksum = CRC8.Calculate(new byte[] { 0xAA, 0x07, 0x00, 0x00, 0x07 ,0x66 ,0xE6, 0x60, 0x44,0x73}); //105
var checksum2 = CRC8.Calculate(new byte[] { 0xAA, 0x07, 0x00, 0x00, 0x07, 0x66, 0xE6, 0x60, 0x44});     //191
var checksum3 = CRC8.Calculate(new byte[] { 170,7,0,0,7,102,230,96,68 });                               //191
var checksum4 = CRC8.Calculate(new byte[] { 170, 7, 0, 0, 7, 102, 230, 96, 68,115 });                   //105
Добавлено через 6 минут
а все, понял, спасибо еще раз

Добавлено через 16 минут
а как была подобрана эта таблица?
0
OwenGlendower
Супер-модератор
Эксперт .NET
9308 / 8170 / 3487
Регистрация: 17.03.2014
Сообщений: 16,206
Записей в блоге: 1
30.06.2016, 18:40 6
millworm, не знаю. Я её взял со страницы на которую ты дал ссылку - http://tomeko.net/online_tools/crc8.php?lang=en
1
30.06.2016, 18:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2016, 18:40

Передача данных по COM-порту. Подсчет контрольной суммы
Здравствуйте! помогите перевести с языка ПАСКАЛЬ на C# Способ подсчета...

Вычисление контрольной суммы файлов в отдельных потоках
Помогите,пожалуйста,искал в интернете,что то подобное,толком ничего не нашел....

Подсчет контрольной суммы файла по CRC32: разобрать код
Здравствуйте. Есть вот этот код, суть его в том, что вбивается название файла,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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