vector<char> als Puffer für C-API
-
Du kannst in C++ mit allen Streams gleich umgehen. Alles, was mit cout geht, geht auch mit selbstangelegten ofstreams, alles, was mit cin geht geht auch mit selbst angelegten ifstreams.
und nur 1 byte?
char byte; datei >> byte;
-
lol es sollte binär sein.. und wer das post vorher gelesen hat (das in WinApi) sollte sehen was mein Problem ist.. ich will Dateien übertragen.. also sollt der Vekot dann so aussehen:
File:1byt der daei |mfg burnner
-
ifstreams könenn auch binär arbeiten. einfach ios::binary beim öffnen angeben. Und wann hast du mir gesagt, dass ich zum beantworten der Frage einen Thread aus dem Winapi-Forum lesen muss?
-
Das ist einfach nur ne Änderung im Konstruktor von fstream. Mit dem Vektor hat das nix zu tun.
-
ich weiss wie man binär schreibt und liest...
http://www.c-plusplus.net/forum/viewtopic.php?t=96230
das ist das eigentliche Problem.. darum auch die Vektoren..
-
btw: Du markierst das Ende der binären Daten mit einem '|'. In binären Daten kann aber jedes mögliche Zeichen vorkommen, also auch ein '|'.
Du hast zwei Möglichkeiten: Entweder du maskierst jedes '|'-Zeichen in den Daten (z.B. indem du zwei '|' draus machst) oder du übermittelst vorher die Länge der Daten.
Letzteres wäre wahrscheinlich einfacher (TCP garantiert ja, dass keine Daten verloren gehen).
-
naja es exisiert immernoch das PRoblem mit dem ein Byte in den Vektor zu kopieren..
-
ey thread verschieber^^ könntest du mir helfen?
-
burnner schrieb:
ey thread verschieber^^ könntest du mir helfen?
IMHO etwas dreist, hier kostenlose Hilfe zu _erwarten_.
Aber ich hab heut meinen guten Tag. Dafür ist das folgende ungetestet und könnte daher total falsch sein:
Helium hat weiter oben diesen Code gepostet:copy (istream_iterator<char>(datei), istream_iterator<char>(), back_inserter(foo));
copy() ist im Prinzip nichts weiter als eine Schleife, die den ersten Parameter solange inkrementiert, bis er dem zweiten gleicht. Nebenbei wird von a nach b kopiert.
Im Prinzip entspricht das also dem hier:vector<char> foo; istream_iterator<char> i(datei), end; // default-konstruktor für end for(; i != end; ++i) foo.push_back(*i);
Ich bin sicher, in diese Schleife jetzt noch einen weiteren int einzubauen, sodass nur die ersten n Zeichen in den Puffer gelesen werden, bekommst du selbst hin.
-
ok werds versuchen Danke! :p