原过程为
procedure EncyNDecy(const ASrc: string; var ADest: string;
  const AOpt: Integer);
var
  I: Integer;
  BB: Byte;
begin
  SetLength(ADest, Length(ASrc));
  case AOpt of
    1: begin  // 加密
      for I := 1 to Length(ASrc)  do begin
        BB := Byte(ASrc[I]) xor $9F;
        BB := (BB shr 4) or ((BB and $F) shl 4);
        ADest[I] := Char(BB);
      end;
    end;
    2: begin  // 解密
      for I := 1 to Length(ASrc)  do begin
        BB := Byte(ASrc[I]);
        BB := ((BB shr 4) and $F) or ((BB and $F) shl 4);
        BB := BB xor $9F;
        ADest[I] := Char(BB);
      end;
    end;
  end;
end现在有2对数组:
Buf1 : array[0..400]of Char
Buf11 : array[0..400]of Char
Buf2 : array[0..100]of Char
Buf22 : array[0..100]of Char
上面的过程是对字符串的,就是入口参数和出口参数是字符串,现在想把入口参数和出口参数变为数组,即buf1入口buf11出口,buf2入口buf22出口,我以前没用过,改了不行,请高手帮忙改一下。

解决方案 »

  1.   

    procedure TForm1.EncyNDecy(Source, Dest: pchar;BB:byte;AOpt: Integer);
    var
      Ch:pchar;
    begin
      ch := Dest;
      case AOpt of
        1: begin  // 加密
          while Source^ <> #0 do
          begin
            BB := Byte(Source^) xor $9F;
            BB := (BB shr 4) or ((BB and $F) shl 4);
            ch^ := Char(BB);
            inc(ch);
            inc(Source);
          end;
          ch^ := #0;
        end;
        2: begin  // 解密   
          while Source^ <> #0 do
          begin         
            BB := Byte(Source^); 
            BB := ((BB shr 4) and $F) or ((BB and $F) shl 4); 
            BB := BB xor $9F;  
            ch^ := Char(BB);
            inc(ch);
            inc(Source);
          end;
        end;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      dest : pchar;
    begin
      dest := StrAlloc(30);
      try
        EncyNDecy(Pchar(edit5.Text),dest,123,1);
        edit6.Text :=string(dest);
      finally
        StrDispose(dest);
      end;
    end;procedure TForm1.Button3Click(Sender: TObject);
    var
      dest : pchar;
    begin
      dest := StrAlloc(30);
      try
        EncyNDecy(Pchar(edit5.Text),dest,123,2);
        edit6.Text :=string(dest);
      finally
        StrDispose(dest);
      end;
    end;
      

  2.   

    procedure TForm1.EncyNDecy(Source, Dest: pchar;BB:byte;AOpt: Integer);
    var
      Ch:pchar;
    begin
      ch := Dest;
      case AOpt of
        1: begin  // 加密
          while Source^ <> #0 do
          begin
            BB := Byte(Source^) xor $9F;
            BB := (BB shr 4) or ((BB and $F) shl 4);
            ch^ := Char(BB);
            inc(ch);
            inc(Source);
          end;
        end;
        2: begin  // 解密
          while Source^ <> #0 do
          begin
            BB := Byte(Source^);
            BB := ((BB shr 4) and $F) or ((BB and $F) shl 4);
            BB := BB xor $9F;
            ch^ := Char(BB);
            inc(ch);
            inc(Source);
          end;
        end;
      end;
      ch^ := #0;
    end;