Inhalt einer Datei hexadezimal ausgeben
-
Aufgabe:
Schreiben Sie ein Progamm, das den Inhalt einer Datei hexadezimal ausdruckt.
Tipp: Da manche Compiler char als signed char implementieren, man aber für die Dar-
stellung eine unsigned-Zahl braucht, muss ein Zeichen etwa wie folgt umgewandelt wer-
den:char c; // evtl. signed while (datei.get(c)) { // lesen unsigned char uc = static_cast<unsigned char>(c); unsigned int zahl = static_cast<unsigned int>(uc); // zahl hier weiterverarbeiten ... }
Musterlösung:
// Datei hexadezimal ausgeben // Hilfsmittel: Zeichen mit String ermitteln #include <cstdlib> // für exit() #include <fstream> #include <iostream> #include <string> using namespace std; int main() { cout << "Dateiname :"; string Quelldateiname; cin >> Quelldateiname; ifstream quelle(Quelldateiname, ios::binary); if (!quelle) { // muss existieren cerr << Quelldateiname << " kann nicht geöffnet werden!\n"; exit(-1); } // char ist notwendig, weil get(unsigned char&) nicht // implementiert ist (GNU C++) char c; // signed! unsigned int count = 0; while (quelle.get(c)) { unsigned char uc = static_cast<unsigned char>(c); unsigned int zahl = static_cast<unsigned int>(uc); const string codierung{"0123456789ABCDEF"}; // 2 stellig ausgeben cout << codierung.at(zahl / 16) << codierung.at(zahl % 16) << ' '; if (++count % 20 == 0) { cout << '\n'; } } cout << '\n'; }
Kann mir vielleicht jemand helfen das nachzuvollziehen?
Ich führe das Programm aus und egal was ich für einen String eingebe, es kommt immer die Fehlermeldung cerr << ...
Die Aufgabenstellung verstehe ich so, dass der Benutzer einen String eingeben soll (also Datei = String).
Soweit müsste ich erstmal kommen um zu versuchen den Rest des Programms nachzuvollziehen.
-
@theAnfänger77 sagte in Inhalt einer Datei hexadezimal ausgeben:
Ich führe das Programm aus und egal was ich für einen String eingebe,
Du musst schon den Namen einer existierenden Datei eingeben und nicht irgendeinen String.
-
Ah danke!
In Zeile 14 heißt das Zauberwort HSC Datei.
-
@theAnfänger77 Du kannst jede Datei nehmen. Auch das Programm selber.
-
@theAnfänger77 sagte in Inhalt einer Datei hexadezimal ausgeben:
cout << codierung.at(zahl / 16) << codierung.at(zahl % 16) << ' ';
std::hex ist Dein Freund.
//edit: ach so, und
std::setw() und
std::setfill()
-
Das verstehe ich auch gar nicht:
cout << codierung.at(zahl / 16) << codierung.at(zahl % 16) << ' ';
Für zahl = 15 wird dann 0 ausgegeben und 15 ist doch F.
Sowas dann eher noch:
unsigned int uc = 15; std::cout << std::hex << uc << ' ';
-
@theAnfänger77 sagte in Inhalt einer Datei hexadezimal ausgeben:
cout << codierung.at(zahl / 16) << codierung.at(zahl % 16) << ' ';
Nö, für 15 wird daraus:
cout << codierung.at(0) << codierung.at(15) << ' ';
also: 0F
-
Ah stimmt!