怎样将TMemoryStream附值给一个string类型

转自:http://www.100test.com/html/537/s__D4_F5_D1_F9_BD_ABTMem_537682.htm
var 
s:TMemoryStream;
str:string;
begin 
ClientDataSet1.SaveToStream(s,dfXML). //但怎样将s附值给str.(str:=s)
str := PChar(s.Position). 或:
with s do 
begin 
setlength(str, size). 
Positon := 0. 
Read(PChar(str)^, size). 
end. 
不好意思写错了,是str := PChar(s.Memory). 不过str := PChar(s.Memory).这样很危险,如果TMemoryStream 中不是以#0结束,或是字符串中间有#0的话,这样转换就会出错,还是用第二种方法保险.用move方法,并且在字符串结尾加上#0用move还不如直接 用TMemoryStream.Read方法,只要不转换成pchar就不用加#0下面算是标准的,

我经常看delphi vcl源码,borland是用的类似写法 
SetLength(str, memoryStream.size)
memoryStream.Positon := 0.
memoryStream.Read(Pointer(str)^,memoryStream.size)

跟我的第二种方法是一样的呀这种方法有个缺点就是重新分配了内存,如果不想重新分配内存的话,直接用Memory指针好了.。 

你可能感兴趣的:(String,Delphi,Borland)