Ik wil een record omzetten naar een string en deze over het netwerk versturen. Vervolgens moet de client hem terug lezen.
Het gaat om een record zonder strings, dus bijvoorbeeld:
Code:
type
TMyRecord = record
MyVar1: Cardinal;
MyVar2: Byte;
MyVar3: Integer;
end;
Om een record om te zetten naar een string gebruik ik deze methode (MyRecord is correct gevuld):
Code:
var
Stream: TMemoryStream;
Data: String;
x: Integer;
Buffer: Byte;
begin
Stream := TMemoryStream.Create;
try
Stream.Write(MyRecord, SizeOf(MyRecord));
Stream.Position := 0;
Data := '';
for x := 0 to Stream.Size do
begin
Stream.Read(Buffer, 1);
Data := Data + IntToHex(Buffer, 2);
end;
finally
Stream.Free;
end;
Result := Data;
end;
Resultaat ziet er goed uit, kan moeilijk controleren. Ik zet alle bytes om naar een hex waarde. Dit is volgens mij een manier om hem als string op te kunnen slaan.
Vervolgens wil ik hem weer terug zetten naar een record (Data is een parameter van type String, komt binnen zoals verzonden):
Code:
var
Stream: TMemoryStream;
x: Integer;
Buffer: Byte;
MyRecord: TMyRecord;
begin
Stream := TMemoryStream.Create;
try
for x := 1 to Length(Data) do
begin
Buffer := StrToInt('$' + Copy(Data, x, 2));
Stream.Write(Buffer, 1);
end;
Stream.Position := 0;
Stream.Read(MyRecord, SizeOf(MyRecord));
finally
Stream.Free;
end;
Result := MyRecord;
end;
Maar ik krijg er hele rare waarden uit, niet echt goed. Is hier een beter manier voor. Of ziet iemand de fout?
Volgens mij is dit mijn langste post ooit, sorry
Bookmarks