Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2013, 10:18   #1
ka11n
Пользователь
 
Регистрация: 05.05.2009
Сообщений: 20
Счастье Контрольная сумма массива байт.

Здраствуйте!
есть задача вычисления контрольной суммы, которая вычисляется как "дополнение до 0 побайтной суммы всех остальных элементов структуры".

Например есть массив байт {06,00,00,00,00}. Его контрольной суммой является число FA, или, другой пример, для массива {06,EA,2F,0E,00} - D3.
Я указываю в 16ой системе, так это лог COM порта
Для меня не очень понятно "дополнение до 0". Опытным путем я вычислил, что контрольной суммой является число, которое дополняет сумму членов массива до круглого числа, для 16-й системы это числа 100, 200, 300 (256, 512 Dec и т.д.), т.е числа кратные 256.
Поэтому, я замутил примерно такой алгоритм
Код:
byte[] bQuery={ 6, 0, 0, 0, 0};
//1. Вычисляем сумму всех байт
KS = (byte)(6 + 0 + 0 + 0 + 0);
//2. Вычисляем кратность суммы числу 256
int x = (byte)(Math.Floor(Convert.ToDouble(KS / 256)) + 1);
//3. Вычисляем ближайшее большее число кратное 256
int Max0 = x * 256;
//4. Вычисляем KS
KS = (byte)(Max0 - KS);
Все это довольно криво, и работает пока как временное решение...
Никто не подскажет как реализовать это работая непосредственно с байтами?
P/S/ Кажется я запутался уже системами исчисления...
ka11n вне форума Ответить с цитированием
Старый 26.02.2013, 11:24   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Изучите операторы ^ и ~.
Также подумайте над заменой этой строки
Код:
KS = (byte)(6 + 0 + 0 + 0 + 0);
на цикл или (лучше) использование Array.Sum().
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контрольная сумма Vito89 Общие вопросы Delphi 1 17.03.2011 00:21
Контрольная сумма Bad-Teo Фриланс 4 29.12.2010 01:46
контрольная сумма мандарин Помощь студентам 3 03.06.2007 19:35