while(i < 8)
    {
       szPwd[i] -= (char) 32 ;
       szPwd[i] ^= (char) (i+1);
       szPwd[i] ^= (char) 12;  // Key= 12
       szPwd[i] += (char) 32;
    i++;
 }
翻译成pascal语言,谢谢先了!

解决方案 »

  1.   

    szPwd[i]的数据类型是?Byte:while i < 8 do
    begin
      Dec(szPwd[i], 32);
      szPwd[i]:=szPwd[i] xor (i + 1);
      szPwd[i]:=szPwd[i] xor 12;
      Inc(szPwd[i], 32);
      Inc(i);
    end;Char:while i < 8 do
    begin
      Dec(szPwd[i], 32);
      szPwd[i] := Char(Byte(szPwd[i]) xor (i + 1));
      szPwd[i] := Char(Byte(szPwd[i]) xor 12);
      Inc(szPwd[i], 32);
      Inc(i);
    end;
      

  2.   

    to ehom(?!) ,这段代码是对用户输入的密码加密,CB里已经通过,现在改成delphi老是非法访问,第一次使用delphi,望不吝赐教!!
    var
    i : integer ;
    temp_char : string ;
    begin
      if (Edit2.GetTextLen()=8) then
        begin
          temp_char := Edit2.Text ;
          i :=0 ;
          while i < 8 do
            begin
              Dec(temp_char[i],32);
              temp_char[i] := char(Byte(temp_char[i]) Xor (i+1));
              temp_char[i] := char(Byte(temp_char[i]) Xor 12);  // Key= 12
              Inc(temp_char[i],32);
              Inc(i);
            end;
         ShowMessage(temp_char);
         Button1.SetFocus();     end;end;
      

  3.   

    to ehom(?!) :
    输入12345678输出应该是八个<即:<<<<<<<<,可是我将i从1开始的时候结果是?=;=3=了!
      

  4.   

    字符串是从1开始的,所以i := 0;
    =>
    i := 1;while i < 8 do
    =>      
    while i <= 8 do
      

  5.   

    我将Inc(temp_char[i],32) 改为了Inc(byte(temp_char[i]),32);同时字符串的下标也改了,可是结果却不是我想要的。
    输入12345678时,输出应该是八个'<'字符的
      

  6.   

    不是阿,在C下输出的是八个'<'!!
      

  7.   

    我明白你的意思了,你的C程序中用的是字符数组,字符数组中从0开始计数,加密时用到了序号所以
    temp_char[i] := char(Byte(temp_char[i]) Xor (i+));
    =>
    temp_char[i] := char(Byte(temp_char[i]) Xor (i));或者其它不做修改
    temp_char: string;
    =>
    temp_char: array[0..255] of char;