小弟鼓起勇气问一个弱弱的问题:
delphi 怎么把一个String转成Tstream?
我需要用InXMLDoc.LoadFromStream()这个方法。
必须要转成Tstring

解决方案 »

  1.   

    我的一般作法:
    var
      x:string;
      m:tmemorystream;
      p:pchar;
    begin
        m:=tmemorystream.Create;
      x:='234234234234';
      p:=pchar(x);           // 将string转成pchar
      m.Write(p^,length(x));  //写入TStream
     ...end;
      

  2.   

    当然,临时变量p可不要,直接写:
      m.Write(pchar(x)^,length(x));
      

  3.   

    我是这样尝试的。然后我这样调用InXMLDoc.LoadFromStream(m);应该可以把?
    为什么程序运行错误。好象还是内存地址的错误。?
      

  4.   

    楼上的是说我要把那个tmemorystream改成TStringStream
    然后在用那个方法读xml串?是把?
      

  5.   

    我的最终目的是想解析一个string形式的xml文档。然后把里面的数据存到list里
    而且那个 xml string 里没有<?xml version="1.0" encoding="gb2312" ?>
    这样的东西。请问各位了,我应该怎么做?
      

  6.   

    我的问题:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    s:string;
    m:tmemorystream;
    InXMLDoc:TXMLDocument;
    begin
    m:=tmemorystream.Create;
    s:='<UI><String Id="L_FeedbackLink_TEXT">Send feedback to Microsoft</String></UI>';
    m.Write(pchar(s)^,length(s));
      //写入TStream
    InXMLDoc:=TXMLDocument.Create(self);  //你不会没有建吧?
    InXMLDoc.LoadFromStream(m);
    memo1.Lines:=InXMLDoc.XML;
    ...
    end;
      

  7.   

    var
      ss : String;
      kk : TStringStream;  //把你的流转成这个就可以了
    beign
      ss := kk.DataString
    end
    通常方法
      

  8.   

    反了,呵呵,是
      kk := TStringStream.Create(ss);
      

  9.   

    在delphi里不等号怎么写啊?
    -------------
    <>
      

  10.   

    我以前的代码,将string、int写入stream,保存为磁盘文件然后读出。
      

  11.   

    //先写字符窜S1的长度到流然后写S1(注意string的指针从1开始);然后写S2的长度然后再写S2;最后往流里随便写了两个整数。
    procedure TForm1.Button1Click(Sender: TObject);
    var
      S: TFileStream;
      sTmp, s1, s2:string;
      iTmp, n1, n2: integer;
    begin
      s1 := '12345';
      s2 := 'abcdefg';
      n1 := 100000;
      n2 := 1024;
      S := TFileStream.Create('d:\\tmp.dat', fmCreate);
      with S do
      try
        iTmp := length(s1);
        s.Write(iTmp, sizeof(iTmp));
        s.Write(s1[1], iTmp);
        iTmp := length(s2);
        s.Write(iTmp, sizeof(iTmp));
        s.Write(s2[1], iTmp);
        s.Write(n1, sizeof(n1));
        Write(n2, sizeof(n2));
      finally
        free;
      end;
    end;
      

  12.   

    //读S1长度,读S1;读S2长度,读S2;读N1,N2procedure TForm1.Button2Click(Sender: TObject);
    var
      S: TFileStream;
      iTmp: integer;
      sTmp:string;
    begin
      S := TFileStream.Create('d:\\tmp.dat', fmOpenRead);
      with S do
      try
        s.Read(iTmp, 4);
        setlength(sTmp, iTmp);
        S.Read(sTmp[1], iTmp);
        showmessage(sTmp);
        s.Read(iTmp, 4);
        setlength(sTmp, iTmp);
        S.Read(sTmp[1], iTmp);
        showmessage(sTmp);
        s.Read(iTmp, 4);
        s.Read(iTmp, 4);
      finally
        free;
      end;
    end;
      

  13.   

    var
      stream:TStream;
      str:string;
    begin
      str:='test string';
      stream:=TMemoryStream.Create;
      stream.writebuffer(str[1],Length(str));
      ......
    end;