textdatei oder bilder in binärcode einlesen?
-
moins
geht das, dass ich ne bilddatei oder ne textdatei als binärcode einlese?
hab erstma son standart einlese dingens geschrieben:#include <fstream> #include<iostream> #include<string> #include "CStringList.h" using namespace std; int DateiLesen(string Datei); string TempText; CStringList TestList; int main() { string Datei; cout<<"Bitte Datei eingeben: "; cin>>Datei; DateiLesen(Datei); cout << "Die Liste enthaelt:" << endl << endl; for ( CStringList::CNode* pNode = TestList.Begin(); pNode; pNode = pNode->GetNext() ) cout << pNode->GetString() << endl; cout << endl << flush; return 0; } int DateiLesen(string Datei) { ifstream Binaer(Datei.c_str()); if (!Binaer) { cout<< "keine Datei vorhanden!"<<endl; return 1; } else { while(Binaer) { getline(Binaer,TempText); const char *cText=TempText.c_str(); TestList.PushBack(cText); } } return 0; }damit kann ich ja normal ne textdatei einlesen. würde von dieser aber gerne nur den binärcode haben, um damit weiterzuarbeiten. falls das überhaupt geht.
vielleicht hat ja jemand ne idee.
gruß
ebrosiusedit: oben das soll standart heißen. ka warum der mir da die sternchen macht

edit2: lol: s t a n d a r t
-
edit: oben das soll stan**** heißen. ka warum der mir da die sternchen macht
edit2: lol: s t a n d a r tLol, immer wieder geil...
@topic:
Was machst du da für Umstände mit den Nodes?
Einfach nen passend großen Block Speicher reservieren, dann die ganze Datei komplett einlesen.Schau dir noch die Zusatzparameter für den Öffnungsmodus von ifstream an.
http://www.cppreference.com/
-
naja wir haben in der uni sone schicke verkettete liste gebastelt. deswegen nehm ich das. ich weiß ja auch garnicht wieviel speicher ich brauch für die datei.
da macht die liste doch sinn *kopfkratz* oder nich?
so...nu werd ich ma n bissl bei cppreference.com stöbern
-
Hi!
Du kannst die Größe der Datei rausbekommen indem du den Dateizeiger ans Ende der Datei setzt und die Position abfragt:
long curr, size; curr = stream.tellp(); stream.seekp( 0, std::ios_base::end ); size = stream.tellp(); stream.seekp( curr, std::ios_base::beg );Danach reservierst du entsprechend viel Speicher:
typedef unsigned char BYTE; // ... BYTE *buffer = new BYTE[ size ]; stream.read( buffer, size ); stream.close();Und schon hast du die ganzen Binärdaten. Wichtig ist die Datei auch als Binärdatei zu öffnen:
std::ifstream stream( "bild.bmp", std::ios_base::in | std::ios_base::binary );Achja, wenn du Standard richtig schreibst gibts auch keine Sternchen.
grüße
-
lol, das würde tatsächlich das mit den sternchen erklären.
hab das mit dem speicher erstma weggelassen und nur das ifstream geändert. das sieht jetz so aus:
//ifstream Binaer(Datei.c_str()); ifstream Binaer( Datei.c_str(), std::ios_base::in | std::ios_base::binary );bringt aber nich wirklich viel änderung

kann die textdatei normal als text einlesen und .jpg oder .bmp kommt auch nich binär
-
Hi!
Du sollst nicht mit getline einlesen sondern mit read. Und dazu brauchst du nen Puffer.
Wenn du zu faul bist ein wenig Speicher zu reservieren, dann machs halt zum testen auf dem Stack.grüße
-
ach so. wusste nich das ich das mit read machen soll.
ich hoffe mal ich habs jetz nicht allzu falsch:#include <fstream> #include<iostream> #include<string> using namespace std; typedef unsigned char BYTE; int main() { string Datei; cout<<"Bitte Datei eingeben: "; cin>>Datei; ifstream stream( Datei.c_str(), ios_base::in | ios_base::binary ); long curr, size; curr = stream.tellp(); stream.seekp( 0, ios_base::end ); size = stream.tellp(); stream.seekp( curr, ios_base::beg ); BYTE *buffer = new BYTE[ size ]; stream.read( buffer, size ); stream.close(); return 0; }allerdings gibt er mir jetz als fehler, das tellp undeclariert ist.
ich will ja deine geduld nicht auf die probe stellen, aber vielleicht nochn tip?
gruß
ebro
-
Hi!
Sorry, sagte ich tellp und seekp? Das war natürlich tellg und seekg, mit "g" am Ende!

grüße