Wahrscheinlich würde Ihre Klasse, die alle Daten enthält, eine statische Funktion haben, die das Objekt erzeugt, das Ihrer serialisierten Zeichenfolge entspricht. Wie es funktioniert, hängt von Ihren Daten ab. Sie sagen, Sie haben Offsets für Felder definiert, sagen aber auch, dass sie abgegrenzt sind. Dies stellt ein Problem dar, da beide unterschiedlich gehandhabt werden müssen.
Einfacher Fall für Ihr Beispiel:
class DataContainer
{
using namespace std; // FIXME Is this legal?
public:
DataContainer(string part1, string part2, string part3, string part4, string part5) :
m_part1(part1), m_part2(part2), m_part3(part3), m_part4(part4), m_part5(part5)
{
}
static DataContainer readFromStream(istream &stream)
{
DataContainer ret;
char tmp[16];
stream.get(tmp, 4);
ret.m_part1 = string(tmp, 4);
stream.get(tmp, 4);
ret.m_part2 = string(tmp, 4);
stream.get(tmp, 3);
ret.m_part3 = string(tmp, 3);
stream.get(tmp, 4);
ret.m_part4 = string(tmp, 4);
stream.get(tmp, 3);
ret.m_part5 = string(tmp, 3);
return ret;
}
private:
DataContainer()
{
}
string m_part1, m_part2, m_part3, m_part4, m_part5; // Put these in an array if they belong in an array.
};
Anmerkung: Ich habe alle meine Funktionen inlined. Sie sollten Ihre Funktionen wahrscheinlich in eine eigene CPP-Datei einfügen.
Verwenden Sie es wie folgt:
DataContainer dc = DataContainer::readFromStream(std::cin);
Dieser liest die Daten aus cin
(stdin
) und stellt die Datenstruktur in dc
.
Wenn Sie die Daten bereits gelesen haben, können Sie STL-Iteratoren (die im Grunde Zeiger auf Elemente eines Containers sind) ganz einfach verwenden. Sie können auch die klassische Indizierung verwenden, die für Ihren Fall einfacher ist. Zum Beispiel:
static DataContainer readFromBuffer(string buffer)
{
DataContainer ret;
ret.m_part1 = string(buffer, 0, 4);
ret.m_part2 = string(buffer, 4, 4);
ret.m_part3 = string(buffer, 8, 3);
ret.m_part4 = string(buffer, 11, 4);
ret.m_part5 = string(buffer, 15, 3);
return ret;
}
Sind A, B, C, D ...soll etwas darstellen, oder sind es buchstäblich diese Charaktere? –
Was ist "ein Puffer"? –