C++ stringbuf und iostream mit Binärdaten

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
alexander_ro
Beiträge: 298
Registriert: 16.01.2006 17:44:21
Lizenz eigener Beiträge: GNU General Public License

C++ stringbuf und iostream mit Binärdaten

Beitrag von alexander_ro » 04.12.2011 08:53:00

Hi Mädels ... Jungs,

ich hätte da eine Frage um zu sehen ob ich damit richtig liege.
In C++ kann man in einem std::string doch beliebige Byte Werte ablegen also nicht nur Texte. Deshalb nehme ich mal an kann ein std::stringbuf das genauso. Wenn man diesen dann mit einem iostream verbindet. Kann man ihn mit den operatoren << >> lesen/schreiben. Hier bin ich mir jetzt nicht ganz sicher was diese tun. Werden von den Standard Operatoren die Daten verändert oder nicht? Also so wie es z.B. std::cout macht um Binäre Zahlen in Text zu konvertieren.

So meine ich das:

Code: Alles auswählen

std::stringbuf msgBuf;
std::iostream msgIostream (&msgBuf);

msgIostream << "gehts so ... " << 0x4252;


std::cout << msgIostream.rdbuf () << std::endl;
Wenn der Standard Operator die Daten konvertiert müsste ich mir eine eigene Version davon schreiben. Wenn nicht könnte ich den Standard Operator verwenden deshalb die Frage.

Grüße
Alexander

Benutzeravatar
bmario
Beiträge: 1257
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: C++ stringbuf und iostream mit Binärdaten

Beitrag von bmario » 05.12.2011 09:39:31

Hallo Alex,

ich glaube nicht, dass dabei dein gewünschtes Ergebnis rauskommt. 0x4252 ist erstmal ein int. Und ich habe das Gefühl, dass du auf dem falschen Weg bist, was willst denn erreichen?
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

alexander_ro
Beiträge: 298
Registriert: 16.01.2006 17:44:21
Lizenz eigener Beiträge: GNU General Public License

Re: C++ stringbuf und iostream mit Binärdaten

Beitrag von alexander_ro » 05.12.2011 16:54:56

Hi bmario,

doch das geht schon. Alles ist ein int ... ;-)

Ich will eine Message an einen Server senden die aus Binärdaten und Text besteht. Es handelt sich dabei um ein sehr kompaktes Protokoll. Ich wollte die einzelnen Teile der Message mit einem Stream zusammen bauen. Dieser darf die Binärteile aber nicht verändern. Wenn man Binärdaten (z.B. einen int) an std::cout sendet wird der verändert und in Text konvertiert das darf meiner nicht tun.

Grüße
Alexander

Benutzeravatar
schorsch_76
Beiträge: 2601
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: C++ stringbuf und iostream mit Binärdaten

Beitrag von schorsch_76 » 05.12.2011 18:21:31

Hi Alex,

du kannst Daten auch mit einem einfachen

Code: Alles auswählen

std::cout.write(xyz) 
an den stream (hier std::cout) ohne Konvertierung schicken. [1] Das hab ich selbst schon bei einem boost::asio Protokoll benutzt. Funktioniert sehr gut mit dem gcc. Ist auch fix.

Meine Empfehlung für dich: http://en.cppreference.com/w/cpp

Gruß
schorsch

[1] http://en.cppreference.com/w/cpp/io/basic_ostream/write

alexander_ro
Beiträge: 298
Registriert: 16.01.2006 17:44:21
Lizenz eigener Beiträge: GNU General Public License

Re: C++ stringbuf und iostream mit Binärdaten

Beitrag von alexander_ro » 05.12.2011 19:31:23

Hi Schorsch,

danke für den Link den kannte ich noch nicht.

Die Memberfunktionen read/write kannte ich schon. Ich fände es nur hübscher mit den Stream Operatoren. ;-)

Werde ich mir wohl selber was bauen müssen aber den stringbuf kann ich ja trotzdem verwenden speichern kann er das ja und dann in einer eigenen Klasse in den op>>, op<< read und write benutzen. Dann hätte ich das so wie ich es wollte und vermutlich wird der Compiler den zusätzlichen Funktionsaufruf so entfernen.

Grüße und schöne Woche
Alexander

Antworten