Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > C Pascal на С++


Автор: debil 12.12.2007, 18:39
Есть железяка. В описание указано как считать контрольную сумму.
двоичное дополнение суммы с циклическим переносом (в том числе последним переносом) всех байтов сообщения,  кроме байта контрольной суммы

Нашел пример на 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;
 
Помогите переделать на С++
 smile 

Автор: bsa 12.12.2007, 18:49
Код
unsigned short AddOne(unsigned short val)
{
    for(;(val > 256); ++val)
         val &= 0x00FF;
    return val;
}
unsigned char GetCtrSum(const unsigned char *Data, unsigned short Size)
{
       unsigned short i, R;
       for(i = 0; i < Size; ++i)
            R = AddOne(R + Data[i]);
       return (unsigned char)(AddOne((R ^ 0xFF) + 1) & 0x00FF);
}

Автор: debil 12.12.2007, 22:04
Спасибо! smile 

Автор: JackYF 13.12.2007, 00:10
debil, помечай тему решённой.

Автор: debil 13.12.2007, 19:59
Для тех кто еще заинтересуется....
работает с указателем

unsigned char GetCtrSum(unsigned char *Data, unsigned short Size)

Автор: THandle 13.12.2007, 20:02
Цитата(JackYF @  13.12.2007,  00:10 Найти цитируемый пост)
debil, помечай тему решённой.

и ещё привыкай пользоваться кнопкой "код" smile 

Автор: bsa 13.12.2007, 22:41
debil, точно у меня была ошибка - исправил.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)