Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 23.03.2005, 17:08 Titel: [UTIL] string to/fro stream |
|
|
Code: |
void writeStringToStream(ofstream& stream, string str)
{
int length = str.length();
stream.write((char*)&length, sizeof(int));
stream.write(str.c_str(), length);
}
|
Code: |
void readStringFromStream(ifstream& stream, string& str)
{
char* buf;
int length;
stream.read((char*)&length, sizeof(int));
buf = new char[length+1];
stream.read(buf, length);
buf[length] = '\0';
str = buf;
delete[] buf;
}
|
Anwendungsbeispiele:
Code: |
ofstream stream;
stream.open("test.txt", ofstream::binary);
string string1 = "Kraft";
int evil = 666;
float posx = 3.141f;
stream.write((char*)&evil, sizeof(int));
writeStringToStream(stream, string1);
stream.write((char*)&posx, sizeof(float));
stream.close();
|
Code: |
ifstream stream;
int evil;
string str;
float posx;
stream.open("test.txt");
stream.read((char*)&evil, sizeof(int));
readStringFromStream(stream, str);
stream.read((char*)&posx, sizeof(float));
stream.close();
cout << evil << endl << str << endl << posx << endl;
|
Happy codin'. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 23.03.2005, 17:11 Titel: |
|
|
Frage am Rande: Hast Du eine Frage oder ist dies ein sinnloses Beispiel?
Jedenfalls wüsste ich nicht wofür diese Funktionen gut sein sollen bis auf einen sinnlosen Overhead.
edit: Also ich weiß nicht, irgendwie scheinst Du den Sinn der streams nicht so ganz begriffen zu haben, du benutzt write und read, obwohl die bei streams größtenteils überflüssig sind.
Das was du da hast schaffe ich als Template mit etwas mehr optimierung:
CPP: | template<typename A, typename T> inline const A lexical_cast(const T& source)
{
::std::basic_stringstream<char> s;
A destination;
if(!(s << source) || !(s >> destination) || !(s >> ::std::ws).eof())
throw "bad lexical cast";
return (destination);
} |
_________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 23.03.2005, 17:55 Titel: |
|
|
Wozu diese Funktionen gut sind kann man vom Namen erschließen... dachte ich jedenfalls... naja was solls. ;)
Mit den Funktionen kann man im binären Modus Strings in Dateien schreiben bzw. lesen und das funktioniert mit den Stream-Operatoren eben nicht, oder in der STL Version von Visual C++ .NET ist ein Bug. ;)
Es wäre sehr schön, wenn du deine nächste Antwort, angenommen ich bekomme noch eine von dir, etwas freundlicher formulieren könntest. Es ist so ein schöner Tag... die Sonne geht grade unter, es ist angenehm warm und ich habe eine super Laune und die möchte ich mir nicht kaputt machen lassen. ^_^
Hmm, dein Template scheint übrigens nicht zu funktionieren, liegt vielleicht auch nur daran, dass du es wieder aus dem Kopf aufgeschrieben hast.
Naja, wenn du mir sagen könntest wie ich mit Hilfe der Stream-Operatoren <i>binär</i> in eine Datei schreiben bzw. aus ihr lesen kann wäre ich dir sehr dankbar. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 23.03.2005, 17:59 Titel: |
|
|
ok, einigen wir uns darauf, das heute ein toller Frühlingstag ist, wir uns nciht streiten wollen, und jeder das benutzen soll, was er besser findet, ja? Man kann sich über vieles streiten, muss es aber net. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 23.03.2005, 18:03 Titel: |
|
|
Hm? Es streitet sich doch keiner... es kann doch auch persönliche Gründe geben, dass man einen Post mal etwas aggressiver formuliert. Mach doch nicht gleich Thermik, Junge. :) _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 23.03.2005, 18:31 Titel: |
|
|
Hmm, ich habe jetzt durch ein paar Seite geblättert und die haben mich alle bestätigt... ::read und ::write gibt es extra für den binären Zugriffsmodus. Wenn du es dennoch schaffst, dass man hierzu die normalen Stream-Operatoren(überladen kann ich auch.. läuft aber auf's gleiche hinaus wie meine Funktionen) verwenden kann würde ich gerne wissen wie.. dann kann ich diese beiden Funktionen wegschmeißen. :)
Nur so nebenbei... mit Stream kann ich eigentlich sehr gut umgehen. ;) _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 23.03.2005, 18:35 Titel: |
|
|
Laut dem C99 Standard müssen die operatoren >> bzw. << für ASCII, unicode und binärdaten benutzbar sein. Beim STL Port geht das ganz einfach:
file << std::size(sizeof(struktur)) << meine_struktur;
das lesen ist fast äquivalten dazu. Jedoch std::size unterstützt nicht jeder STL-Port, deshalb ist die write-funktion gängiger, aber dafür sowas coden wie du es getan hast, naja bissel umständlich  _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 23.03.2005, 20:06 Titel: |
|
|
Hmm, interessant, danke. :) Werd ich mir wohl doch mal wieder den STLPort einrichten.
Umständlich.. naja relativ. Ich hab das eigentlich nur gepostet weil das glaube ich schon ein paar mal gefragt wurde und diejenigen sind dann wieder auf char* und FILE* zurückgegangen. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 24.03.2005, 12:05 Titel: |
|
|
Ich benutze char* bze LPCSTR und FILE*...
Is das schlimm?  _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 24.03.2005, 12:10 Titel: |
|
|
HomeLess_PunkDrummer hat Folgendes geschrieben: | Ich benutze char* bze LPCSTR und FILE*...
Is das schlimm?  |
hehe, meinste, du machst das alles noch mit "fprintf()"???
Dann wäre das durchaus nicht der beste Weg; aber es is Ansichtssache  |
|
Nach oben |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 24.03.2005, 16:06 Titel: |
|
|
Ach so, für Textdateien...
Näh, ich nehm nur Binärdateien, mit fwrite und fread. Gibts da nen besseren Weg? _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
 |
Nahar Senior JLI'ler
Alter: 36 Anmeldedatum: 16.07.2003 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 25.03.2005, 10:25 Titel: |
|
|
Was du machst ist eben noch guter alter C-Style  |
|
Nach oben |
|
 |
OLiver Super JLI'ler

Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 25.03.2005, 11:03 Titel: |
|
|
... und schlechter C++-Style.  |
|
Nach oben |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 25.03.2005, 15:33 Titel: |
|
|
Dann sagt mir doch einfach was guter C++-Style wäre?  _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
 |
|