Datei einlesen

Ähm ... ich weiß zwar nicht was du mit compiler meinst, ich weiß zwar schon was ein compiler ist .

ich benutze Microsoft Visual C++ 6.0

Achja habe mal folgendes ausprobiert ...

cerr << out2<<endl;

da bekomm ich nur die Ausgabe ==> 0012FD94 <== was is das ?
 
2fast4you87 hat gesagt.:
also mit deiner schleife wird meine test.hex von 300 kb auf einmal 900 kb und der hex code ist falsch geschrieben und die datei kann man dann nciht mehr ausführe, sprich die test1.jpg
Also normalerweise sollte es ja wirklich nur doppelt so groß werden, da jeweils 1 Byte gelesen wird und dafür 2 (hexadezimale) Zeichen geschreiben werden.

Kannst du es bitte mal mit einer kleineren Textdatei probieren und beide Dateien hier anhängen?!

Achja habe mal folgendes ausprobiert ...
cerr << out2<<endl;

da bekomm ich nur die Ausgabe ==> 0012FD94 <== was is das ?
In diesem Ausdruck wird out2 in einen Pointer konvertiert (indem der operator void*() aufgerufen wird) und diese Adresse wird dann ausgegeben.
 
ah logisch ich lasse mir die Speicher Adresse ausgeben.
Mit einer kleinen textdatei funktioniert das mühelos.
aber mit einer Bild Datei nciht.

Habe mal einen Screenshot gemacht :
Bild Screenshot


----------------------
wie kann ich jetzt denn den inhalt der *.hex datei in einen string packen ?

wenn du die datei haben willst die 900 kb groß ist, dann lade ichd ie auch ncoh eben hoch .
 
2fast4you87 hat gesagt.:
wie kann ich jetzt denn den inhalt der *.hex datei in einen string packen ?
Dadurch das da keine Whitespaces (Leerzeichen, Newline etc.) drin sein dürften, geht das ganz einfach mit
Code:
ifstream in ("test.hex");
string str;

in >> str;
2fast4you87 hat gesagt.:
wenn du die datei haben willst die 900 kb groß ist, dann lade ichd ie auch ncoh eben hoch .
Ja, es wäre sehr interessant die mal zu sehen. Aber ohne die Eingabe Datei nützt mir das evtl. nicht so viel.

/edit: aber warte mal. Ich hab's grad mal selbst mit einer Grafik Datei probiert und es funktioniert auch bei mir nicht...
 
Zuletzt bearbeitet:
#include <string>
#include <sstream>
#include <fstream>
#include <iostream>


using namespace std;

int main(int argc, char *argv[])
{

ifstream in ("test.hex");
string str;

in >> str; // das funktioniert

str.replace( r.find( "a"), strlen("a"), "b"); // das leider nicht ...



in.close();
return 0;
}
 
OK. Jetzt weiß ich woran es liegt. Der Typ char entspricht entweder dem Typ "signed char" oder dem Typ "unsigend char". Alle 3 Typen sind verschieden.

Wenn der Typ char einem signed char entspricht (was hier der Fall ist) dann kann der Wert natürlich negativ sein, so dass nachdem er in einen int ge-castet wurde ein Wert wie 0xffffff rauskommt was dann auch in der Datei steht.

Eigentlich wollte ich ja ein wildes casten bzw. zu komplizierten Code vermeiden.

Also entweder machst du es dann so:
Code:
int c;
while (out && (c = in.get (), in)) {
  out << setw (2) << c;
}
Der obige Code verwendet den Sequenz-Operator (das Komma). Dabei werden die Ausdrücke von links nach rechts ausgewertet, das Ergebnis ist das Resultat des letzten Ausdrucks.

oder z.B. so:
Code:
while (out) {
  int c = in.get ();
  if (in) {
    out << setw (2) << c;
  else break;
}
 

Neue Beiträge

Zurück