JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

[UTIL] string to/fro stream
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 23.03.2005, 17:08    Titel: [UTIL] string to/fro stream Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 23.03.2005, 17:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 23.03.2005, 17:55    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 23.03.2005, 17:59    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 23.03.2005, 18:02    Titel: Antworten mit Zitat

etwas binär in eine Datei schreiben? ganz einfach:

::std::ios::binary als 2. parameter im C'tor des fstream-objektes angeben Wink
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 23.03.2005, 18:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 23.03.2005, 18:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 23.03.2005, 18:35    Titel: Antworten mit Zitat

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 Wink bissel umständlich Wink
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 23.03.2005, 20:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 12:05    Titel: Antworten mit Zitat

Ich benutze char* bze LPCSTR und FILE*...
Is das schlimm? Rolling Eyes
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 12:10    Titel: Antworten mit Zitat

HomeLess_PunkDrummer hat Folgendes geschrieben:
Ich benutze char* bze LPCSTR und FILE*...
Is das schlimm? Rolling Eyes


hehe, meinste, du machst das alles noch mit "fprintf()"???
Dann wäre das durchaus nicht der beste Weg; aber es is Ansichtssache Laughing
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 16:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Nahar
Senior JLI'ler


Alter: 36
Anmeldedatum: 16.07.2003
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 25.03.2005, 10:25    Titel: Antworten mit Zitat

Was du machst ist eben noch guter alter C-Style Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 25.03.2005, 11:03    Titel: Antworten mit Zitat

... und schlechter C++-Style. Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 25.03.2005, 15:33    Titel: Antworten mit Zitat

Dann sagt mir doch einfach was guter C++-Style wäre? Smile
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum