HexCode von Datein ausgeben



  • Hallo Leute,

    Weiß jemand von euch, wie es möglich ist den HexCode einer Datei auszulesen?

    Bis jetzt habe ich folgendes Programm geschrieben:

    string files; 
    ifstream dat_ein; 
    
    dat_ein.open("C:\My.doc" , ios_base::in); 
    if(!dat_ein) 
    { 
      cout << "Die ausgewählte Datei konnte nicht geöffnet werden!" << endl; 
    } 
    else 
    { 
    
    char zeichen; 
    while(!dat_ein.eof()) 
    { 
    dat_ein.get(zeichen); 
    files += zeichen; 
    } 
    } 
    
    dat_ein.close();
    

    Der Code macht auch genau das, was er tun soll: er liest die Datei aus, und speichert ihren Inhalt in der string-Variable files. Leider aber nur den Text der in der Datei gespeichert ist.

    Nun suche ich eine Möglichkeit den HexCode von Datein auszulesen.
    Wie muss ich mein Programm umschreiben?

    MfG Cfunc(y)



  • Was meinst du mit Hex-Code von Dateien? Ich denke, du willst einfach nur ne hexadezimale Darstellung der Zeichen.

    cout << hex << static_cast<int>(zeichen);
    


  • ist halt C ^^:

    char ac[3]="";
    sprintf(ac,"%x",(int)zeichen);
    files += ac;
    


  • Cfunc() schrieb:

    Weiß jemand von euch, wie es möglich ist den HexCode einer Datei auszulesen?

    Zum Beispiel so:

    #include <fstream>
    #include <iostream>
    #include <iomanip>      // setw
    #include <algorithm>    // copy
    #include <iterator>     // istreambuf_iterator, ostream_iterator
    
    struct CharPrint
    {
        CharPrint( char c ) : m_c( c ) {}
        friend std::ostream& operator<<( std::ostream& out, const CharPrint& hx )
        {
            return out << std::setw(2) << int( hx.m_c );
        }
    private:
        unsigned char m_c; // Bem.: muss unsigned sein
    };
    
    int main()
    {
        using namespace std;
        ifstream datei("eine_datei.txt");
        copy( (istreambuf_iterator< char >( datei )), istreambuf_iterator< char >(),
            ostream_iterator< CharPrint >( cout << hex, " " ) );
        return 0;
    }
    

    Gruß
    Werner

    PS.:

    BorisDieKlinge schrieb:

    ist halt C ^^:

    char ac[3]="";
    sprintf(ac,"%x",(int)zeichen);
    files += ac;
    

    .. was willst Du uns damit sagen?



  • bin nich mehr so involviert...

    hab streams und string so gearbeitet... so weit ich mich erinnere könnte man das in C mit sprintf %x machen oder net?=



  • Meine Kristallkugel spricht:

    Er/Sie will keine hexidezimale Repräsentation der einzelnen Bytes aus der geöffneten Datei, er/sie will die Datei binär öffnen:

    ifstream myfile("my.doc", ios::binary);
    

    Grüße...

    Heiko



  • @Werner
    Die Extraklammern in deinem copy-Aufruf brauchst du nicht. Da copy eindeutig ein Funktionsaufruf ist, kann "C++'s most vexing parse" dir hier nicht in die Suppe spucken 😉

    Hier sind sie natürlich richtig und nötig :p



  • Hy Werner Salomon,

    Danke - dein Code regelt das was ich mir vorstellte.

    Kannst du mir auch sagen, wie ich den HexCode in einer Variable speichere?

    Wie kann ich anhand des HexCodes die Datei schreiben?

    MfG Cfunc(y)


Anmelden zum Antworten