在实际编程中,经常会用到Buffer,当string作为Buffer传值时需要注意的是
1, string的值的起始索引是1,千万记住!
2, 有时候需要先告诉系统去开辟出内存空间,用SetLength函数。
如下代码,示范了再Move、 WriteBuffer、 ReadBuffer时候的用法:
- unit Unit3;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
-
- type
- TForm3 = class(TForm)
- Memo1: TMemo;
- Button1: TButton;
- Button2: TButton;
- Button3: TButton;
- Button4: TButton;
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- procedure Button4Click(Sender: TObject);
- private
-
- FMemoryStream: TMemoryStream;
- FBuffer: string;
- public
-
- end;
-
- var
- Form3: TForm3;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm3.Button1Click(Sender: TObject);
- var
- LStr: string;
- LLen: Integer;
- begin
- LStr := ‘太棒了!Hello, 世界 我太爱你了‘;
- LLen := Length(LStr);
-
- FMemoryStream.WriteBuffer(LLen, SizeOf(LLen));
-
- FMemoryStream.WriteBuffer(LStr[1], LLen);
- end;
-
- procedure TForm3.Button2Click(Sender: TObject);
- var
- LStr: string;
- LLen: Integer;
- begin
-
- FMemoryStream.Position := 0;
- FMemoryStream.ReadBuffer(LLen, SizeOf(LLen));
- SetLength(LStr, LLen);
-
- FMemoryStream.ReadBuffer(LStr[1], LLen);
-
- Memo1.Lines.Add(LStr);
- end;
-
- procedure TForm3.Button3Click(Sender: TObject);
- var
- LStr: string;
- LLen: Integer;
- LIndex: Integer;
- begin
- LStr := ‘世界很美好 Hello, World!‘;
- LLen := Length(LStr);
-
- SetLength(FBuffer, SizeOf(LLen) + LLen);
-
- LIndex := 1;
-
- Move(LLen, FBuffer[1], SizeOf(LLen));
-
- Inc(LIndex, SizeOf(LLen));
-
- Move(LStr[1], FBuffer[LIndex], LLen);
- end;
-
- procedure TForm3.Button4Click(Sender: TObject);
- var
- LStr: string;
- LLen: Integer;
- LIndex: Integer;
- begin
- LIndex := 1;
- Move(FBuffer[1], LLen, SizeOf(LLen));
- Inc(LIndex, SizeOf(LLen));
- SetLength(LStr, LLen);
-
- Move(FBuffer[LIndex], LStr[1], LLen);
-
- Memo1.Lines.Add(LStr);
- end;
-
- procedure TForm3.FormCreate(Sender: TObject);
- begin
- FMemoryStream := TMemoryStream.Create;
-
- end;
-
- procedure TForm3.FormDestroy(Sender: TObject);
- begin
- FMemoryStream.Free;
- end;
-
- end.
http://blog.csdn.net/procedure1984/article/details/5419454
Move WriteBuffer ReadBuffer String
原文:http://www.cnblogs.com/findumars/p/5087578.html