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.