function StreamDataToStr(Stream: TMemoryStream): string;
var
i, z: int64;
d: Pointer;
begin
Result:='';
if Stream=nil then Exit;
z:=Stream.Size;
d:=Stream.Memory;
i:=0;
while i < z do
begin
Result:=Result+Format('%.2X', [Byte(Pointer(Longint(d) + i)^)]);
Inc(i);
end;
end;
function StrToStreamData(StrData: string; Stream: TMemoryStream): Boolean;
var
E: Integer;
i, z: int64;
d: Pointer;
begin
Result:=False;
if (StrData='') or (Stream=nil) then Exit;
Stream.Clear;
z:=Length(StrData) div 2;
Stream.SetSize(z);
d:=Stream.Memory;
i:=0;
while i <= z do
begin
Val('$'+Copy(StrData, i*2+1, 2), Byte(Pointer(Longint(d) + i)^), E);
Inc(i);
if E<>0 then Break;
end;
Result:=Stream.Size=z;
end;
稍改动一下可以每次用4个字节读写