1、如果是WideString,直接用Length就可以了,不用×2。
2、应该可以,而且是自动的。例c := ws[1];
3、buffer := Pchar(TmpStr);

解决方案 »

  1.   

    请您试好以后再回答,但是按你所说,
    1、我只能保存一半的长度。能解释吗?(别太含糊,那样的话我也不问了。)
    2、如果是string还勉强,但是widestring按你的方法是不可以的。
    3、那肯定不对。
      

  2.   

    length(varWideString)的结果:
     varWideString := '我的String';
     length(varWideString)==8
    不信你试试。
    要得到相应AnsiString的长度:
     var s1: AnsiString; s1 :=  varWideString;
     Length(s1);
    即可。 
      

  3.   

    uses SysUtils;
    var
      A: array[0..79] of Char;
      S: String;
    begin
      S := 'Honk if you know Blaise.';
      StrPCopy(A, S);
      Canvas.TextOut(10, 10, string(A));
    end;
      

  4.   

       原来widestring把汉字的长度记为1,'a'也为1,谢谢jingpingyi,大家继续
      

  5.   

    对不起,我承认我没试。不过
    1、我在用Delphi对Word进行Ole Automation时,里面的变量全是WideString,取Length确实就是这样。你必须确定Length中的参数一定是WideString。
    2、string本来就可以,WideString的话,可以做个强制类型转化,c := Char(ws[1]),当然有丢失的话,我可不管。
    3、我看错了,把byte看成了Char。
    如果这样我觉得用CopyMemory就可以了。
    FillMemory(@Buffer, 255, 0);
    CopyMemory(@buffer, Pchar(tmpStr), Length(tmpStr));
      

  6.   

    (System.pas)
    function WideCharToString(Source: PWideChar): string;
    function StringToWideChar(const Source: string; Dest: PWideChar; DestSize: Integer): PWideChar;//至于PWideChar与WideString间的转换,String 与 char 间的转换,你想去吧。
      

  7.   

      SetFile:TFileStream;
      TxtContent:WideString;
      EncryTxt:WideString;
      TmpTxt1:AnsiString;
    begin
       //***************************
       TmpTxt1:=TxtContent;
       //***************************
       //SetFile.write(EncryTxt[1],Length(EncryTxt)*2);
      SetFile.write(EncryTxt[1],Length(TmpTxt1));
    用上述方法不行呀。当读出数据时已经不够长度了。
    但用SetFile.write(EncryTxt[1],Length(EncryTxt)*2)则可以。