есть процедура:
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] на 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 .... )
Здравствуйте, Аноним, Вы писали:
А>есть процедура:
А>А>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;
Здравствуйте, Аноним, Вы писали:
А>есть процедура:
А>А>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) Точно не помню.
Здравствуйте, Аноним, Вы писали:
А>есть процедура:
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;
Здравствуйте, Softwarer, Вы писали:
type
TByteArray = array [ 0..65520 ] of byte ;
PByteArray = ^TByteArray ;
Это дело уже обьявлено в SysUtils.
Здравствуйте, <Аноним>, Вы писали:
А>есть процедура:
А>А>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 >>