Datei als 0 und 1 darstellen?



  • Hi Leute!

    Hab jetzt wieder mit C++ angefangen, war vorher bei Visual Basic 🤡.
    Meine Frage:
    Wenn ich eine Datei binär auslese und dann in der Konsole darstellen lasse, kommen lauter unverständliche Zeichen raus 😕.

    Kann ich eine Datei irgendwie auslesen und in Nullen und Einsen darstellen?

    Vielen, vielen Dank! 🙂



  • Hi!

    Ich nehme mal an, du ließt die Datei mit getline oder char für char aus und gibst sie auch so auf der Konsole aus. Das heißt, wenn du eine Binärdatei ausließt, dann wird alles im ASCII-Code ausgegeben. Das sind aber nicht alles "druckbare Zeichen".
    Poste mal ein bißchen Code, dann ist es leichter zu sagen an was es liegt.

    mfg bernd



  • Ganz einfach:
    Du liest die Datei ein (hast du ja offensichtlich schon gemacht) und gibst die Bytes (der entsprechende Typ in C++ ist char) in Binärdarstellung (http://de.wikipedia.org/wiki/Binärdarstellung) aus (Ausgaben hast du ja anscheinend auch schon gemacht).



  • Mein Code sieht wie folgt aus:

    #include <cstdlib>
    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
            string line;
            ifstream datei ("C:/datei.txt", ios::binary);
            if (datei.is_open())
            {
               while (!myfile.eof())
               {
                     linenum++;
                     getline (datei,line);
                     cout << line << endl;
               }
               datei.close();
            }   
            system("PAUSE");
            return EXIT_SUCCESS;
    }
    

    Könntet ihr mir ein Beispiel geben? :p

    EDIT: Aahh, ihr meint also, ich soll den KeyCode (z.B. 176) in Binärcode umrechnen?



  • Dafür empfiehlt sich std::bitset:

    std::bitset<8> bits(dereingelesenechar);
    std::cout << bits << std::endl;
    

  • Mod

    Dubeo schrieb:

    EDIT: Aahh, ihr meint also, ich soll den KeyCode (z.B. 176) in Binärcode umrechnen?

    Genau. Da aber kaum je ein Mensch Daten tatsächlich binär darstellt, musst du dir was eigenes basteln, das gibt's nicht in der Standardbibliothek. Das bekommst du vermutlich alleine hin, ist simpel.

    Die übliche Darstellung von digitalen Rohdaten ist das Hexadezimalsystem. Das ist kurz und übersichtlich.

    edit: Cool, bitset kann das? Ich bin positiv überrascht über die Möglichkeiten der Standardbibliothek. Mal wieder was gelernt, vergiss was ich oben übers Selberschreiben gesagt habe.



  • Hi!

    Also der erste Fehler ist schon mal in Zeile 15. Da überprüfst du die Variable myfile auf eof. Aber die Datei, die du geöffnet hast heißt datei.
    Dann hast du die Variable linenum nicht deklariert.

    Eigentlich sollten dir das die Compilermeldungen auch mitgeteilt haben.

    #include <string>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
      string line;
      int linenum = 0;
    
      ifstream datei("C:/datei.txt");
      if (datei.is_open())
      {
        while (!datei.eof())
        {
          linenum++;
          getline (datei,line);
          cout << line << endl;
        }
        datei.close();
      }  
      system("PAUSE");
      return EXIT_SUCCESS;
    }
    

    mfg bernd



  • @bauerb, ja hab vergessen das umzuschreiben^^ Hab im Code das myfile in datei geändert, damit ihr es besser erkennt.
    linenum wird in Zeile 8 deklariert.



  • Dubeo schrieb:

    linenum wird in Zeile 8 deklariert.

    Ja, weils ich hingeschrieben hab. In deiner Version steht da nichts von linenum. 🙂



  • wooops, hab ich wohl vorhin rausgelöscht 😃


Anmelden zum Antworten