Zitat von
ryLIX:
Schau dir mal den Ahang an vielleicht kannst du damit was Anfangen.
Jupp, kann ich - siehe Anhang.
(ist einfach nur nachprogrammiert, ich hätte diversen Typen/Funktionen/Variablen andere Namen gegeben und anstatt Assign/Reset/Read/Close mit Sicherheit TMemoryStream verwendet (auch für die Analyse der Datenblöcke)).
Kurzer Überblick:
Code:
while (!eof)
{
uint8_t Size;
uint16_t ID;
uint8_t Data[Size];
uint8_t Checksum; // xor Size,ID,Data[...]
};
Die Interpretation von Data[] hängt von der ID ab:
Code:
// ID(0x0100): // definition block start
// ID(0x0200): // definition block header
// ID(0x0300): // definition name
// uint16_t ID;
// uint8_t Name[Size - sizeof(ID)]; // includes '\0'
// ID(0x0400): // definition data_format
// uint8_t DataFormat[Size]; // includes '\0'
// ID(0x0500): // definition data_names
// uint8_t DataNames[Size]; // includes '\0'
// ID(0xFF00): // data block start
// ID(<else>): // ID == Definition[x].ID
// uint8_t Data[Size]; // parse with Definition[x].DataFormat
Für die Implementation von ParseData() bin ich zu faul - viel Spaß