1

Тема: VBA: Перевод функции шифрования с Pascal на VBA

Уважаемые форумчане! Если не затруднит, помогите перевести с pascal на vba функцию шифрования

function Encryption(const Key: string; BufferIn, BufferOut: PByteArray; ReadOrWrite, Size: Integer): Integer;
var
   i: integer;
   k: integer;
begin
   Result := 0;
   if (Length(Key) = 0) then
   begin
      if BufferIn <> BufferOut then
         Move(BufferIn^,BufferOut^,Size);
      exit;
   end;
   if ReadOrWrite = 0 then  {Read operation, so decrypt}
   begin
      k := 1;
      for i := 0 to Size-1 do
      begin
         BufferOut^[i] := BufferIn^[i] xor (byte(Key[k]) or (i and $FF));
         inc(k);
         if k > length(Key) then k := 1;
      end;
      Result := -1;   {Decrypted}
   end
   else
   begin                    {write operation, so encrypt}
      k := 1;
      for i := 0 to Size-1 do
      begin
         BufferOut^[i] := BufferIn^[i] xor (byte(Key[k]) or (i and $FF));
         inc(k);
         if k > length(Key) then k := 1;
      end;
      Result := 1;       {Encrypted}
   end;
end;

end.

Особые затруднения вызывают ^ и $FF

2 (изменено: vo1ty, 2012-12-01 02:06:04)

Re: VBA: Перевод функции шифрования с Pascal на VBA

Честно говоря, я не силён в VB, а точнее, вообще с ним почти не знаком, могу помочь только тем, что помню из курса Паскаля.
^ в паскале - указатель (разыменование)

Somevar := 5; // допустим это переменная типа integer, теперь она = 5
A := @Somevar; // теперь A содержит указатель (ссылку) на SomeVar
A^ := 6; // теперь Somevar == 6, мы изменили значение переменной, расположенной по адресу A.

Хотя, честно говоря, я в этом не уверен, поскольку Паскаль уже забывается по-тихоньку.

Знак доллара - это hex value, $FF (Паскаль) == 255 == 0xFF (С\JS) == &HFF (а может, &HFF&, НЕ ЗНАЮ ТОЧНО, в VB).