Есть железяка. В описание указано как считать контрольную сумму.
двоичное дополнение суммы с циклическим переносом (в том числе последним переносом) всех байтов сообщения, кроме байта контрольной суммы
Нашел пример на Pascal подсчета контрольной суммы
function GetCtrSum (Data : PByteArray; const Size : WORD) : byte;
function AddOne (Val : word) : word;
begin
while Val > 256 do begin
WordRec (Val).Hi := 0; Val := Val + 1;
end;
result := Val;
end;
var I, R : word; x : byte;
begin
R := 0;
for I := 0 to Size - 1 do R := AddOne (R + Data^[I]);
x := R xor $FF;
R := AddOne(x + 1);
result := WordRec®.Lo;
end;
Помогите переделать на С++
Для железки лучше на Сях, без плюсов... Как-то вот так:
typedef struct _cvt {
unsigned char Lo, Hi;
} CVT;
unsigned add_one(unsigned val) {
while(val > 256) {
((CVT*)&val)->Hi = 0;
val += 1;
}
return val;
}
unsigned char GetCtrSum(unsigned char *data, unsigned size) {
unsigned r;
unsigned char x;
r = 0;
while(size--) {
r = add_one(r + (*data++));
}
x = r ^ 0xff;
r = add_one(x + 1);
return ((CVT*)&r)->Lo;
}
Спасибо volvo , это то что нужно, завтра встрою в С++Builder