Aus einem Vektor in ein Binärfile schreiben
-
einzelnen Werte in eine Datei schreiben. Muß aber jeden Wert einzeln in die var.
eff speicher und ausgeben damit das richtige raus kommt.
Vielleicht kann mir wer einen Tipp geben wie das leichter/besser geht.
Dankebool noEffect = false;
bool isEffect = true;
std::vector<bool>effect;
for (int cnt = 0; cnt<4; cnt++)
effect.push_back(noEffect);for ( int cnt = 0; cnt < effect.size(); cnt++)
{
bool eff = effect[cnt]; // diesen schritt will ich auslassen aber wie?
michl.write(reinterpret_cast<char*>(&eff),sizeof(bool));
// muss über bool eff arbeiten, denn bei z.B.: effect[0] = -64
}
-
*nachdenkt* vector<bool> verwendet eine kompaktere Darstellung, um Speicherplatz zu sparen, deshalb liefert der Index-Operator auch keinen bool zurück, sondern eine Hilfsklasse, die sich in den meisten Situationen wie ein bool verhält - Basteleien mit reinterpret_cast gehören zu den Fällen, wo sich der Unterschied bemerkbar macht. Eine portable Lösung dafür fällt mir leider auch nicht ein.
-
Wieviele verschiedene Zustände brauchst du denn? Wenn es wirklich nur einige wenige sind (bspw. bis zu 64) kannst du auch direkt einen 64 bittigen Integer nehmen und mit Bitoperationen einzelne Flags setzen, löschen und abfragen.
Auch kannst du Integer natürlich ohne Probleme in Dateien schreiben und wieder einlesen.
-
ev. std::bitset benutzen?
http://www.cplusplus.com/reference/stl/bitset/
-
Vielleicht so?
char *isfalse = "0"; char *istrue = "1"; std::vector<bool>effect; for (int cnt = 0; cnt<4; cnt++) effect.push_back(noEffect); for ( size_t cnt = 0; cnt < effect.size(); cnt++) michl.write( effect[cnt] ? istrue : isfalse, sizeof(char) );EDIT:
Oder falls es auch binär geschrieben werden soll:char isfalse[2]; isfalse[0] = isfalse[1] = 0; char istrue[2]; istrue[0] = 1; istrue[1] = 0;
-
Danke für die schnelle Antwort, das macht einiges klar.