Unerwünschte Unwandlung von ASCII in Zahlencode



  • Hallo,

    ich versuche mittels folgendem Code eine Datei einzulesen:

    #include <string>
    #include <fstream>
    #include <iostream>
    
    using namespace std;
    
    int main() {
        string temp = "";
        ifstream Einlesen("blub.txt");
    
        while(!Einlesen.eof()) {
            temp += Einlesen.get();
            cout << temp << endl;
        }
    }
    

    Leider funktioniert dies nur so unter Windows. Unter Linux (läuft unter der virtuellen Maschine VMware) werden die Zeichen jedoch als Zahlencode ausgegeben und nicht als ASCII-Code. Gibt es dafür unter Linux eine andere Methode?

    Als Compiler verwende ich unter beiden Betriebssysteme den gcc-Compiler.

    Vielen Dank für eure Mühe im Voraus.

    Gruß,

    Tobias



  • probiers mit

    char c;
    Einlesen.get(c);
    temp += c;
    

    oder

    temp += static_cast<char>(Einlesen.get());
    

    Du rufst nämlich int std::istream::get(); auf, du kannst jetzt entweder casten oder die überladene Methode std::istream& std::istream::get(char& c); für deine Zwecke verwenden.



  • Hallo,

    vielen Dank für die schnelle Hilfe. Das mit dem Char hat funktioniert.

    Allerdings funktioniert die Methode "eof()" nicht. Er landet in einer Endlosschleife. Gibt es eine andere Methode, das Dateiende abzufangen?

    Gruß,

    Tobias



  • #include <string>
    #include <fstream>
    #include <iostream>
    #include <sstream>
    
    using namespace std;
    
    int main() {
        ifstream Einlesen("blub.txt");
        ostringstream s;
        s << Einlesen.rdbuf();
        string temp = s.str();
        cout << temp << endl;
    }
    

    oder:

    #include <string>
    #include <fstream>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    int main() {
        ifstream Einlesen("blub.txt");
        string temp;
        copy(streambuf_iterator<char>(Einlesen),
             streambuf_iterator<char>(),
             back_inserter(temp));
        cout << temp << endl;
    }
    

    Kann allerdings noch ein compile-Fehler drin sein. Das überlasse ich den Lesern 😉 .

    Hat aber nichts mit Linux zu tun, sondern ist reines C++. Dein Code ist einfach falsch. Er funktioniert nur zufällig unter Windows.


Anmelden zum Antworten