ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
1123
1123
EMPFEHLEN
-
Hallo!
Ich hätt da mal wieder gern a Problem
Und zwar versuche ich zur Zeit, in C++ den Hexa-Dezimal-Dump einer Datei zu erzeugen.
Das funktioniert auf der Konsolenansicht auch wunderbar (Beispiel folgt).
Nur wenn es nun darum geht, die selbe Ausgabe auch in eine Datei zu bekommen, dann weiß ich nicht mehr so recht, wie ich das machen soll.
Hier mal der gesamte Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
#include <iostream.h> #include <fstream.h> void main(void) { ifstream dump; ofstream dump_out; char dump_pfad[100]; char ausgabe_pfad[100]; cout << "Hex-Dump einer Datei\n"; cout << "--------------------\n\n"; cout << "Pfad der Datei angeben: "; cin >> dump_pfad; cout << "Pfad der Ausgabe-Datei angeben: "; cin >> ausgabe_pfad; dump.open(dump_pfad, ios::nocreate); if(!dump) cout << "\nDatei nicht gefunden oder fehlende Zugriffsrechte"; else { char nxt_ch; //nächster Charakter int nr_ch=0; //Zahl des Charakter cout << hex; //Hexa-Ausgabe int speicher; dump_out.open(ausgabe_pfad); while(dump.get(nxt_ch)) { if(nr_ch % 16 == 0) { cout << "\n"; cout.width(6); cout << hex << nr_ch << " "; } cout.width(3); cout << int(nxt_ch); speicher = int(nxt_ch); dump_out.put(speicher); nr_ch++; } } dump.close(); dump_out.close(); }
Eine Datei mit Inhalt "123abc" erzeugt damit folgende Hexa-Anzeige:
Code :1
0 31 32 33 61 62 63
0 ist die Zahl des ersten Elements einer Zeile (vergleichbar mit Speicheradressierung)
Und hier kommt nun der Abschnitt des Codes, der mir Probleme macht:
Code :1 2
speicher = int(nxt_ch); dump_out.put(speicher);
Mache ich aus Speicher eine char-Variable, dann kopiert er mir die Datei 1 zu 1
Ist Speicher aber eine int-Variable, dann krieg ich die Fehlermeldung:
Weiß hier jemand Rat?Code :1
"Ambiguity between 'ostream::put(char)' and 'ostream::put(signed char)' "
Vielen Dank schon mal im Voraus!
shutdownVersuche nie Probleme zu lösen, von deren Existenz du noch gar nichts weißt!
-
09.04.05 21:38 #2
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Da du die Ausgabe in die Datei ja nicht binär, sondern als normalen Text machen möchtest, kannst du einfach den <<-Operator verwenden (genauso wie bei cout). Beispiel, ohne Gewähr:
In deinem Code hast du das mit cout ja schon gemacht -- für die Datei funktioniert es genauso.Code :1
dump_out << hex << nirgendein_wert << " ";
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Danke für die Antwort!
Nur leider funktionierts nicht so einfach.
Er bringt zwar keine Fehlermeldungen wenn ich mit << in die Outputstream schreibe, er erstellt die Datei aber auch nicht.
Damit ich weiterhin 2 Probleme:
1) Mit dump_out << "\n"; wird keine Datei erstellt.
2) Ich habe jetzt meinen Code etwas erweitert, so dass die Darstellung schon einem gewöhnlichen Hex-Editor recht nahe kommt. Ich hab jetzt einfach mal alle \n durch ein Zeichen ^ ersetzten lassen, um mir Zeilenumbrüche in der Ausgabe zu ersparen. Das funktioniert bei Textdateien auch sehr gut. Wenn ich dann aber andere Formate einlesen will, z.B. .bak, .c, .doc dann scheint es doch noch ein paar mehr Zeichen zu geben, die einen Zeilenumbruch verursachen. Wie schalt ich das ab?
Ihr könnt es ja mal ausprobieren. Hier mein abgewandelter Code inkl. dem dump_out <<
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
#include <iostream.h> #include <fstream.h> #include <string.h> void main(void) { ifstream dump; ofstream dump_out; char dump_pfad[100]; char ausgabe_pfad[100]; cout << "Hex-Dump einer Datei\n"; cout << "--------------------\n\n"; cout << "Pfad der Datei angeben: "; cin >> dump_pfad; cout << "Pfad der Ausgabe-Datei angeben: "; cin >> ausgabe_pfad; dump.open(dump_pfad, ios::nocreate); if(!dump) cout << "\nDatei nicht gefunden oder fehlende Zugriffsrechte"; else { char nxt_ch; //nächster Charakter int nr_ch=0; //Zahl des Charakter cout << hex; //Hexa-Ausgabe char ch_arr[20]; for(int i=0; i<=20; i++) ch_arr[i] = '\0'; char speicher[2]; // int speicher; dump_out.open(ausgabe_pfad); while(dump.get(nxt_ch)) { if(nr_ch == 0) { cout.width(6); cout.fill('0'); cout << hex << nr_ch << " "; dump_out << hex << nr_ch << " "; } if((nr_ch % 16 == 0) && !(nr_ch == 0)) { cout << "\n"; cout.width(6); cout.fill('0'); cout << hex << nr_ch << " "; dump_out << "\n" << hex << nr_ch << " "; } cout.width(3); cout.fill(' '); cout << hex << int(nxt_ch); dump_out << hex << int(nxt_ch); speicher[0] = nxt_ch; speicher[1] = '\0'; if(speicher[0] == '\n') strcpy(speicher, "^"); strcat(ch_arr, speicher); if(ch_arr[15] != '\0') { cout << " |" << ch_arr << "|"; dump_out << " |" << ch_arr << "|"; for(int i=0; i<=20; i++) ch_arr[i] = '\0'; } // speicher = int(nxt_ch); // dump_out.put(speicher); nr_ch++; } if(nr_ch % 16 != 0) { int wert = 16 - (nr_ch % 16); for(wert; wert > 0; wert--) { cout.width(3); cout.fill(' '); cout << "00"; dump_out << "00"; } cout << " |" << ch_arr << "|"; dump_out << " |" << ch_arr << "|"; ch_arr[0] = '\0'; } } dump.close(); dump_out.close(); }
cu shutdownVersuche nie Probleme zu lösen, von deren Existenz du noch gar nichts weißt!
Ähnliche Themen
-
Bestimmten Text aus Datei auslesen und in eine andere Schreiben
Von wissensdurstxxl im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 08.08.07, 10:03 -
Werte von einer Javascript Datei an eine andere. Geht das?
Von BeachBoy im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 12.01.06, 16:55 -
Aus Datei lesen und in eine andere Datei schreiben
Von Computerpinguin im Forum C/C++Antworten: 1Letzter Beitrag: 03.05.05, 14:29 -
Materialien/Objekte aus einer c4d Datei in eine andere
Von wookenny im Forum Cinema 4DAntworten: 5Letzter Beitrag: 22.11.04, 17:16 -
Text von einer PHP Datei in eine andere includen ?
Von C4T im Forum PHPAntworten: 2Letzter Beitrag: 13.01.04, 08:40





Zitieren
Login






