transStr(str: string): string;
var
  a, i, p: BYTE;
  r: string;
begin
  r := str;
  p := $AA;
  for i := 1 to length(str) do
  begin
    a := ord(str[i]);
    r[i] := chr(a xor p);
    Inc(p);
  end;
  result := r;
end;

解决方案 »

  1.   

    //也不知道对不对,反正忘了好多了....
    char * TransStr( char * str)
    {
      byte a, i, p;
      char *r;  r = str;
      p = 0xAA;  for (i = 0; i < strlen(str) - 1; i++)
      {
        a = byte(str[i]);
        r[i] = char(a &~ p);  //忘了异或怎么写了,好像是这样 :(
        ++p;
      }  return r;
    }
      

  2.   

    简易加密, 对 str 中每个字符跟 $AA 作异或, 第一次调用是加密后的str, 第二次调用就能还原原来的 str
      

  3.   


    Delphi:transStr(str: string): string; 
    var 
      a, i, p: BYTE; 
      r: string; 
    begin 
      r := str; 
      p := $AA; 
      for i := 1 to length(str) do 
      begin 
        a := ord(str[i]); 
        r[i] := chr(a xor p); 
        Inc(p); 
      end; 
      result := r; 
    end; C++:
    Char * transStr(Char * str)
    {
      BYTE p=0xAA,r=0;
      Char * tmp=str;
      while (NULL!= *tmp )
        {
          r=(BYTE)*tmp ;
          *tmp =(Char)r ^ p;
          tmp ++;
        }
      return tmp; 

     
      

  4.   


    char * transStr(char * str)
    {
     for(char * p = str; *p!= NULL; ++p)
       *p ^= 0xAA;
     
     return str;
    }
      

  5.   

    不过这样会把原来的str改掉了,最好再传一个char*的参数进来,或者你自己把结果给free掉
      

  6.   

    FallenAngel的转译代码是错误的这段代码没法直接用C写,因为String是Delphi里的私有数据类型。
      

  7.   

    是错的,因为他inc(p)了,但是string在C里面其实就是char*,只不过C里面对char*操作比较麻烦而已
    char * transStr(char * str)
    {
     BYTE a = 0xAA;
     char *p = NULL; for(p = str; *p!= NULL; ++p, ++a)
       *p ^= a;
     
     return str;
    }
    这段代码很眼熟啊,貌似是冒险岛资源字符串的加、解码操作?
      

  8.   

    完全和char*不是一回事,VCL里String在负偏移的地址里保存了4字节长度,String在编译器层次支持了Copy-On-Write.这些char*都不具备,char*只是个最简单的判断\0结尾的字串.