关于流:怎样对流的内容一个字节一个字节地操作?(30分)

  • 主题发起人 主题发起人 *HelloWorld*
  • 开始时间 开始时间
H

*HelloWorld*

Unregistered / Unconfirmed
GUEST, unregistred user!
我想写一个函数,把Memo上的文字内容放入一个StringStream中,然后通过函数把这段文字
加密,结果是StringStream类型,再通过Memo的Lines.loadfromStream放回memo中显示。由于
对流操作不熟悉,看了一些资料也没弄清楚根本,所以想请教一下大家,得到原来的StringStream
后,怎么样才能对它的内容一个字节一个字节地操作(加密),就像数组那样?
 
或者用MemoryStream也可以,我对流操作还不懂。
 
哎,大家怎么不帮帮呢?挺急的。
我现在的想法是:先把内容装在stream里,然后一个byte一个byte地放在缓冲里。
我的代码是这样的:

procedure TForm1.Button3Click(Sender: TObject);
var
sm:TMemoryStream;
buf:pchar;
i,count:integer;
begin
count:=length(memo1.Text )
//字数

//创建一个流,大小为count,装入memo1的内容
sm:=TMemoryStream.Create
sm.SetSize(count);
Memo1.Lines.SaveToStream(sm);

//创建一个缓冲区,大小也为count,写入流的内容
getmem(buf,count);
sm.Write(buf^,count);

//一个字节一个字节地对缓冲区进行加密操作(这里简单地就是把每个字节都设 为char(97)),
for i:=0 to count-1 do
begin
buf:=char(97)
//这里加密,现在假设是变成char(97)
end;

//再把缓冲区的结果内容放回sm流,做为加密后的流
sm.Seek(0,soFromBeginning);
sm.Read(buf^,count);

//把结果显示在memo1上,可是不对!
buf:=nil;
memo1.Lines.LoadFromStream(sm);
sm.Clear

end;

上面是我写的代码,有点乱,而且结果不对。缓冲区的每个字节都能按照预定的设好,
但是返回到sm流后感觉就不对了。再Load到memo1上就更不对了。这是为什么?
 
不用流呀,直接用string不就可以了?
如果非要用流不可,那就用StringStream咯,
^_^, 和操作String一样操作StringStream.DataString.
 
后退
顶部