Results 1 to 4 of 4

Thread: Record omzetten naar string en terug lezen

  1. #1

    Record omzetten naar string en terug lezen

    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

  2. #2
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Waarom eerst naar hex? Een string kan ook binaire data bevatten, en je socket componenten zullen al helemaal niet zeuren, het zou je dus flink wat schelen

    Voor 'rare waarden' heb ik geen verklaring, aangenomen dat de data 1 op 1 overgekomen is. Output even de strings naar logfiles o.i.d. om te vergelijken...
    Qui custodiet ipsos custodes

  3. #3
    Ik kan dus gewoon een binaire waarde sturen met Indy mbv de WriteLn?
    Ik moet me aan strings houdens aangezien alles op tekst is gebaseerd wat over het netwerk gaat tussen de client en server.

  4. #4
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    als je je 100% aan tekst wilt houden stuur je ook geen hex-data maar IntToStr je de zooi , anders gebruik je nog data die je alleen terug kan lezen met hetzelfde record in feite...

    Maar ja, je kan gewoon strings sturen. Het kan zelfs leuker: WriteStream. Deze stuurt standaard de grootte van de stream ook nog mee zodat de andere kant weet hoe groot ie is...
    Qui custodiet ipsos custodes

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Version Information opvragen
    By Richard in forum Algemeen
    Replies: 13
    Last Post: 11-Dec-05, 23:06
  2. String omzetten naar hondertsten
    By teyeheimans in forum Algemeen
    Replies: 5
    Last Post: 22-Dec-03, 17:22
  3. Replies: 2
    Last Post: 21-Oct-03, 17:09
  4. Replies: 2
    Last Post: 14-Oct-03, 20:47
  5. Replies: 5
    Last Post: 06-Apr-03, 15:29

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •