class CheckSummCounter
{
protected:
int cs;
public:
__fastcall CheckSummCounter() { cs = 0xFF; };
void __fastcall Reset(void) { cs = 0xFF; };
void __fastcall Process(void *ProcessBytes, int BytesCount);
void __fastcall Process(char ProcessByte) { cs ^= (int)ProcessByte; };
int __fastcall Done(void) { int x = cs; this->Reset(); return x; };
};
void __fastcall CheckSummCounter::Process(void *ProcessBytes, int BytesCount)
{
for(int i = 0; i < BytesCount; i++)
this->Process(((char*)ProcessBytes));
};
void __fastcall TForm1::Button2Click(TObject *Sender)
{
CheckSummCounter e3;
e3.Process((void*)(Edit3->Text.c_str()), Edit3->Text.Length());
AnsiString x;
Edit2->Text = x.sprintf("%2X",e3.Done());
}
Подсчет контрольной суммы CRC
Может кто сталкивался с такими вещами как подсчет контрольной суммы. Алгоритм подсчета такой:
Контрольная сумма (КС) представляет собой дополнение до нечетности суммы по модулю два всех байт запроса или ответа (без байта КС).
КС = FFh * 1-й байт * 2-й байт * … * последний байт
* - сумма по модулю два.
Заранее спасибо.
Цитата: Borgir
Добрый день.
Может кто сталкивался с такими вещами как подсчет контрольной суммы. Алгоритм подсчета такой:
Контрольная сумма (КС) представляет собой дополнение до нечетности суммы по модулю два всех байт запроса или ответа (без байта КС).
КС = FFh * 1-й байт * 2-й байт * … * последний байт
* - сумма по модулю два.
Заранее спасибо.
Может кто сталкивался с такими вещами как подсчет контрольной суммы. Алгоритм подсчета такой:
Контрольная сумма (КС) представляет собой дополнение до нечетности суммы по модулю два всех байт запроса или ответа (без байта КС).
КС = FFh * 1-й байт * 2-й байт * … * последний байт
* - сумма по модулю два.
Заранее спасибо.
Если я правильно понял алгоритм...
Код:
Просто я в этих бинарных операция вообще ничего не смыслю.
Плюсик за мной :)