下面是我的一段代码.
问题是这样的: 我想实现以下过程 string -> WideString -> ByteArray -> WideString -> string.
但是中间出了问题,输入的string和得到的string并不相同.
以前我是学C++的,后来改用Delphi了,但Pascal基础不好.请大家多多指教.
procedure TfmMain.btnTestClick(Sender: TObject);
var
  W, R: WideString;
  S: string;
  P: PByteArray;
  I: Integer;
begin
  S := '中国人123';
  I := Length(S);
  P := AllocMem(I * 2);
  try
    W := S;
    Move(W[1], P^[3], I);
    SetLength(R, I);
    Move(P^[3], R[1], I);
    S := R;
    ShowMessage(Format('[%s]', [S]);
  finally
    FreeMem(P);
  end;
end;

解决方案 »

  1.   

    不好意思,打错个地方,又不知道如何修改,所以写在下面.
    procedure TfmMain.btnTestClick(Sender: TObject); 
    var 
      W, R: WideString; 
      S: string; 
      P: PByteArray; 
      I: Integer; 
    begin 
      S := '中国人123'; 
      I := Length(S); 
      P := AllocMem(I * 2); 
      try 
        W := S; 
        Move(W[1], P^[0], I); 
        SetLength(R, I); 
        Move(P^[0], R[1], I); 
        S := R; 
        ShowMessage(Format('[%s]', [S]); 
      finally 
        FreeMem(P); 
      end; 
    end; 
      

  2.   

    问题已解决.
    procedure TfmMain.btnTestClick(Sender: TObject);  
    var  
      W, R: WideString;  
      S: string;  
      P: PByteArray;  
      I: Integer;  
    begin  
      S :=  '中国人123 ';  
      W := S;  
      I := Length(W);  
      P := AllocMem(I * 2);  
      try  
        Move(W[1], P^[0], I * 2);  
        SetLength(R, I);  
        Move(P^[0], R[1], I * 2);  
        S := R;  
        ShowMessage(Format( '[%s] ', [S]));  
      finally  
        FreeMem(P);  
      end;  
    end; 
      

  3.   

    应该是widestring和string的长度的问题.