Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#9

Re: Speicherausrichtung (Align) berechnen

  Alt 24. Nov 2009, 20:01
nja, theoretisch kannst du den Record auch selber Element für Element abspeichern.

so bräuchtest du aber nur einmal den Aufbau definieren
(mal sehn, ab Delphi 2010 kannst dir eventuell auch von der neuen RTTI den Aufbau geben lassen)
und kannst diesen für die Serialisierung UND auch gleich für die Deserialisierung und auch an mehreren Stellen verwenden.

oder gleich die kurze Variante über'n Parser
Delphi-Quellcode:
RI.Parse('ii8isiw4r(w4w8w8w8i8i8c260c14)');
XML.AddNode('data').Serialize(Data, RI);
und schon hast du mit nur 2 Zeilen den Demo-Record mit 16 Werten gespeichert.

Delphi-Quellcode:
TXMLSerializeRDataType = (
  rtBoolean, rtBOOL, rtByte, rtWord, rtLongWord, rtWord64, {rtCardinal,}
  rtShortInt, rtSmallInt, rtLongInt, rtInt64, {rtInteger,}
  rtSingle, rtDouble, rtExtended, {rtReal,} rtCurrency, rtDateTime,
  rtAnsiCharArray, rtWideCharArray, {rtCharArray,}
  rtShortString, rtAnsiString, rtWideString, rtUnicodeString, {rtString,}
  rtBinary, rtVariant, rtObject, rtRecord, rtArray, rtDynArray,
  rtDummy, rtAlign, rtResetAlign);
von den Serialisierungen lassen sich ganze Variants, Objekte und Records/Arrays speichern
und vorallen bei den Records und Variants sind die ganzen Binär<>Text-Konvertierungen alle schon enthalten.

Vor 'ner Weile hatte ich dieses auch mal mißbraucht
Delphi-Quellcode:
Uses Dialogs, himXML__DataConv;

Var Src: packed Record
           B: Byte;
           i: Integer;
           S: String;
         End;
  Dest: packed Record
           S: String;
           i: Integer;
           W: Word;
         End;

Begin
  Src.B := 123;
  Src.i := 987654321;
  Src.S := 'Test';
  DataConverter(Src, Dest, 'p1 w1>B i>I s>S', 'p1 s>S i>I w2>W');
  ShowMessage(Format('"%s" %d', [Dest.S, Dest.i]));
End;
Und mir 'nen Record-Converter gebastelt, da ich 'ne Binärdatei umstellen mußte.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat