Ofstream: Hexadezimal schreiben



  • Hallo,
    ich möchte einen Text über die Konsole
    einlesen und diesen dann Hexadezimal in
    eine Datei schreiben. Ich habe schon
    mehrere Varianten versucht, doch bisher
    funktioniert es noch nicht.

    ofstream output;
    string print;
    output.open("test.txt", ios_base::out);
    cin >> print;
    output << print;
    

    0x0ERROR


  • Mod

    Wie sieht denn ein Text in Hexadezimal aus? Meinst du die Zeichencodes der einzelnen Buchstaben?



  • std::hex
    Beispielhafte Verwendung ist auf der Seite beschrieben.

    EDIT: Koenntest ja dann einfach ueber den Text iterieren und dann die Zeichen-Codes hexadezimal rausschmeissen, wenn es das ist, was du willst.


  • Mod

    Hier noch die übliche Antwort, die hier im Forum auf ungenaue Fragen erfolgt:

    #include <iostream>
    #include <algorithm>
    #include <iomanip>
    #include <iterator>
    
    int main()
    {
      using namespace std;
      copy(istream_iterator<unsigned char>(cin), istream_iterator<unsigned char>(), ostream_iterator<int>(cout << hex, " ")); 
    }
    

    Siehe:
    http://ideone.com/qFzlw7
    und
    http://www.c-plusplus.net/forum/200753



  • SeppJ schrieb:

    Wie sieht denn ein Text in Hexadezimal aus? Meinst du die Zeichencodes der einzelnen Buchstaben?

    Ja, ich meine die Zeichencodes der Buchstaben. Und anhand
    der Zeichencodes soll dann der Text geschrieben werden.

    0x0ERROR


  • Mod

    0x0ERROR schrieb:

    SeppJ schrieb:

    Wie sieht denn ein Text in Hexadezimal aus? Meinst du die Zeichencodes der einzelnen Buchstaben?

    Ja, ich meine die Zeichencodes der Buchstaben. Und anhand
    der Zeichencodes soll dann der Text geschrieben werden.

    0x0ERROR

    Dann hast du ja schon eine passende Antwort. In weniger STL'igerer Sprache steht da: "Lese solange Zeichen wie du kannst, gib sie als Zahl aus. Benutz vorher den Manipulator hex ."



  • SeppJ schrieb:

    Dann hast du ja schon eine passende Antwort. In weniger STL'igerer Sprache steht da: "Lese solange Zeichen wie du kannst, gib sie als Zahl aus. Benutz vorher den Manipulator hex ."

    Nein, da steht: "Lese einzelne Zeichen ein, flushe dabei jedesmal cout und übersprünge alle Whitespaces und gib sie dann hexadezimal formatiert aus mit einem Leerzeichen dazwischen und am Schluss."


  • Mod

    stelli schrieb:

    SeppJ schrieb:

    Dann hast du ja schon eine passende Antwort. In weniger STL'igerer Sprache steht da: "Lese solange Zeichen wie du kannst, gib sie als Zahl aus. Benutz vorher den Manipulator hex ."

    Nein, da steht: "Lese einzelne Zeichen ein, flushe dabei jedesmal cout und übersprünge alle Whitespaces und gib sie dann hexadezimal formatiert aus mit einem Leerzeichen dazwischen und am Schluss."

    Stimmt. Man füge dem Eingabestream noch ein noskipws an. Wen das flushen bei cin/cout stört, der nehme einen istreambuf_iterator. Für Dateien ist es egal, da diese sowieso nicht ge-tie-ed sind.

    Unnötig komplizierte Version:
    http://ideone.com/GjzOLx

    Das nachgeschleppte Leerzeichen ist mir einfach mal egal.



  • SeppJ schrieb:

    Unnötig komplizierte Version:
    http://ideone.com/GjzOLx
    [

    istreambuf_iterator<char>((cin >> noskipws).rdbuf())
    

    ]

    lol?


Log in to reply