string转Tstream 小弟鼓起勇气问一个弱弱的问题:delphi 怎么把一个String转成Tstream?我需要用InXMLDoc.LoadFromStream()这个方法。必须要转成Tstring 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我的一般作法: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; 当然,临时变量p可不要,直接写: m.Write(pchar(x)^,length(x)); 我是这样尝试的。然后我这样调用InXMLDoc.LoadFromStream(m);应该可以把?为什么程序运行错误。好象还是内存地址的错误。? 楼上的是说我要把那个tmemorystream改成TStringStream然后在用那个方法读xml串?是把? 我的最终目的是想解析一个string形式的xml文档。然后把里面的数据存到list里而且那个 xml string 里没有<?xml version="1.0" encoding="gb2312" ?>这样的东西。请问各位了,我应该怎么做? 我的问题:procedure TForm1.Button1Click(Sender: TObject);vars:string;m:tmemorystream;InXMLDoc:TXMLDocument;beginm:=tmemorystream.Create;s:='<UI><String Id="L_FeedbackLink_TEXT">Send feedback to Microsoft</String></UI>';m.Write(pchar(s)^,length(s)); //写入TStreamInXMLDoc:=TXMLDocument.Create(self); //你不会没有建吧?InXMLDoc.LoadFromStream(m);memo1.Lines:=InXMLDoc.XML;...end; var ss : String; kk : TStringStream; //把你的流转成这个就可以了beign ss := kk.DataStringend通常方法 反了,呵呵,是 kk := TStringStream.Create(ss); 在delphi里不等号怎么写啊?-------------<> 我以前的代码,将string、int写入stream,保存为磁盘文件然后读出。 //先写字符窜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; //读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; var stream:TStream; str:string;begin str:='test string'; stream:=TMemoryStream.Create; stream.writebuffer(str[1],Length(str)); ......end; TSpinEdit的值判斷問題 很很很简单问题...想不明白.. 各位大哥帮我看看这个问题,出错在哪?在线等........... 请教解析url中传过来字符串的好方法 sql语句问题,高手帮帮忙。 找书,关于delphi的设计模式的书! 大家来帮忙关于IP地址的 提示找不到组件的.dcu文件 以下是我的 下一步(NEXT) 代码,。帮我看看有什么错误呀 TFieldType我想转换为我可以显示的格式怎么做 关于格式化字符串的问题,方法简单者得分! 在Delphi中怎样设置identity_insert 属性为 on
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;
m.Write(pchar(x)^,length(x));
为什么程序运行错误。好象还是内存地址的错误。?
然后在用那个方法读xml串?是把?
而且那个 xml string 里没有<?xml version="1.0" encoding="gb2312" ?>
这样的东西。请问各位了,我应该怎么做?
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;
ss : String;
kk : TStringStream; //把你的流转成这个就可以了
beign
ss := kk.DataString
end
通常方法
kk := TStringStream.Create(ss);
-------------
<>
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;
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;
stream:TStream;
str:string;
begin
str:='test string';
stream:=TMemoryStream.Create;
stream.writebuffer(str[1],Length(str));
......
end;