Как переделать из C++
От: Аноним  
Дата: 13.04.05 09:19
Оценка:
есть процедура:

ArcFourInit(struct ArcFourContext *context, const byte *key, unsigned int key_length)


в ней код:

for (i = 0; i < 256; i++)
  {
   j = (j + key[k] + a) & 0xff;
  }


как переделать key[k] на pascal, Delphi ругается на все мои попытки!
Re: Как переделать из C++
От: Softwarer http://softwarer.ru
Дата: 13.04.05 09:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>как переделать key[k] на pascal, Delphi ругается на все мои попытки!


Есть два варианта. Во-первых, сколь помнится, этот синтаксис поддерживается для PChar-ов, которые вполне совместимы с const byte *key. Ну а лично я сделал бы так:

type
  TByteArray = array [ 0..65520 ] of byte ;
  PByteArray = ^TByteArray ;

procedure ArcFourInit ( .... Key : PByteArray .... )
procedure ArcFourInit ( .... const|var Key : TByteArray .... )
Re: Как переделать из C++
От: Dimonka Верблюд  
Дата: 13.04.05 09:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>есть процедура:


А>
А>ArcFourInit(struct ArcFourContext *context, const byte *key, unsigned int key_length)
А>


А>в ней код:


А>
А>for (i = 0; i < 256; i++)
А>  {
А>   j = (j + key[k] + a) & 0xff;
А>  }
А>


А>как переделать key[k] на pascal, Delphi ругается на все мои попытки!



Key: PByteArray;

j:= (j + Key^[k] + a) AND $FF;


Или

Key: PChar;

j:= (j + Byte(Key[k]) + a) AND $FF;
Re: Как переделать из C++
От: Аноним  
Дата: 13.04.05 09:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>есть процедура:


А>
А>ArcFourInit(struct ArcFourContext *context, const byte *key, unsigned int key_length)
А>


А>в ней код:


А>
А>for (i = 0; i < 256; i++)
А>  {
А>   j = (j + key[k] + a) & 0xff;
А>  }
А>


А>как переделать key[k] на pascal, Delphi ругается на все мои попытки!


Толи (key + k)^, толи ^(key + k) Точно не помню.
Re: Как переделать из C++
От: icWasya  
Дата: 13.04.05 09:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>есть процедура:


ArcFourInit(struct ArcFourContext *context, const byte *key, unsigned int key_length)


На паскале


procedure ArcFourInit(var context:ArcFourContext; key : PByteArray; key_length:Cardinal);

PByteArray — из SysUtils


в ней код:

for (i = 0; i < 256; i++)
  {
   j = (j + key[k] + a) & 0xff;
  }


Ну уже ошибка — переменная цикла i, а внутри цикла — k;
Кроме того, верхняя граница цикла должна быть скорее всего не 256, а key_length.
итого
for i := 0 to key_length-1 do begin
   j := (j + key[k] + a) and $ff;
end;
Re[2]: Как переделать из C++
От: Dimonka Верблюд  
Дата: 13.04.05 09:32
Оценка:
Здравствуйте, Softwarer, Вы писали:

type
  TByteArray = array [ 0..65520 ] of byte ;
  PByteArray = ^TByteArray ;

Это дело уже обьявлено в SysUtils.
Re: Как переделать из C++
От: mpn_arv  
Дата: 19.04.05 12:07
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>есть процедура:


А>
А>ArcFourInit(struct ArcFourContext *context, const byte *key, unsigned int key_length)
А>


ArcFourInit(...; key: PChar; ...)


А>
А>   j = (j + key[k] + a) & 0xff;
А>


j := (j + ord(key[k]) + a) and $0ff;


Это как один из вариантов.
... << RSDN@Home 1.1.4 beta 2 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.