在使用的时候将中文转换为ascii码就会出现乱码,
主要是delphi7的String与其它的char,

解决方案 »

  1.   

    function EncryptString(Source, Key: string): string;
    //对字符串加密(Source:源 Key:密匙)
    var
        KeyLen: integer;
        KeyPos: integer;
        Offset: integer;
        Dest:  string;
        SrcPos: integer;
        SrcAsc: integer;
        Range: integer;
    begin
        KeyLen := Length(Key);
        if KeyLen = 0 then
            Key := 'delphi';
        KeyPos := 0;
        Range := 256;
        randomize;
        Offset := random(Range);
        Dest := format('%1.2x', [Offset]);
        for SrcPos := 1 to Length(Source) do
        begin
            SrcAsc := (Ord(Source[SrcPos]) + Offset) mod 255;
            if KeyPos < KeyLen then
                KeyPos := KeyPos + 1
            else
                KeyPos := 1;
            SrcAsc := SrcAsc xor Ord(Key[KeyPos]);
            Dest := Dest + format('%1.2x', [SrcAsc]);
            Offset := SrcAsc;
        end;
        result := Dest;
    end;
    function UnEncryptString(Source, Key: string): string;
    //对字符串解密(Src:源 Key:密匙)
    var
        KeyLen: integer;
        KeyPos: integer;
        Offset: integer;
        Dest:  String;
        SrcPos: integer;
        SrcAsc: integer;
        TmpSrcAsc: integer;
    begin
        if Source = '' then
        begin
            Result := '';
            Exit;
        end;
        KeyLen := Length(Key);
        if KeyLen = 0 then
            Key := 'delphi';
        KeyPos := 0;
        Offset := strtoint('$' + copy(Source, 1, 2));
        SrcPos := 3;
        repeat
            SrcAsc := strtoint('$' + copy(Source, SrcPos, 2));
            if KeyPos < KeyLen then
                KeyPos := KeyPos + 1
            else
                KeyPos := 1;
            TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);
            if TmpSrcAsc <= Offset then
                TmpSrcAsc := 255 + TmpSrcAsc - Offset
            else
                TmpSrcAsc := TmpSrcAsc - Offset;
            Dest := Dest + Char(TmpSrcAsc);
            Offset := SrcAsc;
            SrcPos := SrcPos + 2;
        until SrcPos >= Length(Source);
        result := Dest;
    end;
    帮忙将这段代码给修改一下,这段代码在delphi7里面运行没有问题在,在xe3里面就不可以运行的。
      

  2.   

    已经解决了问题将string改为AnsiString就可以。