Помощь - Поиск - Пользователи - Календарь
Полная версия: c паскаля на С++
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Юрон
Есть железяка. В описание указано как считать контрольную сумму.
двоичное дополнение суммы с циклическим переносом (в том числе последним переносом) всех байтов сообщения, кроме байта контрольной суммы

Нашел пример на 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;

Помогите переделать на С++ nea.gif

volvo
Для железки лучше на Сях, без плюсов... Как-то вот так:

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 good.gif , это то что нужно, завтра встрою в С++Builder nea.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.