Datei einlesen und binär ausgeben



  • Moin!

    Ich habe z.B. eine txt Datei mit folgendem Inhalt

    test
    1234
    

    Nun möchte ich diesen Inhalt binär mir anzeigen lassen.
    (-> 1 = 1; 3 = 11; 4 = 100)

    Mein bisheriger Code

    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    int main() {
    
    	string path = "1.txt";
    
    	char a[100];
    
    	int b=0;
    
    	fstream file;
    
    	file.open(path.c_str(), ios_base::in | ios_base::binary);
    
    	while(!file.eof()) {
    
    		file.get(a[b]);
    
    		++b;
    
    		if(b==100) {
    
    			break;
    
    		}
    
    	}
    
    	file.close();
    
    	return 0;
    
    }
    

    Grüße und Danke

    Freddy Krüger


  • Mod

    #include <iostream>
    #include <fstream>
    #include <bitset>
    
    int main()
    {
    	std::ifstream stream{"1.txt", std::ios::binary};
    
    	for( char c; stream.get(c); )
    		std::cout << std::bitset<8>(c) << '\n';
    }
    


  • Ich hätte eine kleine Ergänzung zu Arcoth's Antwort:

    Ich habe z.B. eine txt Datei mit folgendem Inhalt

    test
    1234
    

    (-> 1 = 1; 3 = 11; 4 = 100)

    #include <iostream>
    #include <fstream>
    #include <bitset>
    #include <locale> // is digit
    
    int main()
    {
        std::ifstream stream("1.txt", std::ios_base::binary);
    
        for( char c; stream.get(c); )
        {
            if (std::isdigit(c)) // ignoriert alles außer Zahlen
                std::cout << std::bitset<8>(c-'0') << '\n';
        }
    }
    


  • Danke für die hilfreichen Antworten.

    Wie sieht es dann bei einem Dateiinhalt wie einer "exe" oder einer anderen Datei aus, bei dem die Zeichen nicht in den 8 bit langen Folgen untergebracht werden können?

    Danke.



  • Warum sollen manche Dateien auf demselben System anders sein als andere?

    Die Konstante CHAR_BIT aus <climits> gibt ansonsten an, wieviele Bits ein char (ein Byte) hat.



  • Wie muss ich dann den Code dafür anpassen?

    Ich bin einwenig überfordert....



  • freddy krüger schrieb:

    Wie muss ich dann den Code dafür anpassen?

    Ich bin einwenig überfordert....

    Das liegt daran, dass Du nicht die Frage stellst, die Dir auf dem Herzen liegt.

    Deine erste Frage wurde prompt beantwortet: Wie gebe ich den Inhalt einer Datei binär aus?

    Deinem Code zufolge willst Du aber noch irgendwas anderes machen - da ist ja noch nichtmal eine Ausgabe drin!

    Da fragt man sich also: was will der Mann denn eigentlich erreichen?



  • Ich wollte später vllt den Inhalt der Datei(en) binär manipulieren.



  • freddy krüger schrieb:

    Ich wollte später vllt den Inhalt der Datei(en) binär manipulieren.

    Was heißt "binär manipulieren"? Inwiefern denkst du ist das notwendig? Was willst du erreichen?



  • Z.B wollte ich die folgende Binärfolge 1001 oder auch 100110 mit z.B. 101 addieren oder subtrahieren. Dann soll es in eine neue Datei gespeichert werden.



  • Und dann?



  • Es soll einfach eine "einfache" Übung sein um z.B. eine Datei binär zu verschlüsseln



  • Der Computer arbeitet intern immer binär. Was du da gefragt hast, war die Darstellung zur Basis Zwei für den Menschen.

    Schau dir das Kapitel über Bitweise Operationen* in deinem Buch an.

    *& | ^ ~ << >>



  • Es geht mir eigentlich darum eine x beliebige Datei mit beliebigen Inhalt auf eine selbst bestimmte Art und Weise zu verschlüsseln.

    Z.B das die Bitfolge 01011101010101 -> 11011110101100 "umgestellt" wird und anschließend in eine andere Datei gespeichert wird.

    Dafür wollte ich nur wissen, wie ich die Bitfolgen als Variablen hernehmen kann. (beliebige lange Bitfolgen)

    (ich weiß, dass der Computer intern immer binär arbeitet)

    Edit: vllt wollte in der binär Folgen auch 1 bzw 0 hinzufügen oder rausnehmen

    Ich hoffe, ihr könnt mir helfen.

    Danke


  • Mod

    Hast du mal DirkBs Tipp befolgt? Das ist genau die Antwort, die du brauchst.

    Klammer dich nicht zu sehr an die menschenlesbare Binärdarstellung! Denk mathematisch! Beispiel:

    unsigned char a = 41;       // menschenlesbare Binärdarstellung: 00101001
    unsigned char b = a ^ 255;  // menschenlesbare Binärdarstellung: 11010110 
    unsigned char c = a ^ 255;  // menschenlesbare Binärdarstellung: 00101001
    

    Hier wurden Operationen auf Bitebene durchgeführt (nur einfache Operationen, da ein Beispiel. Aber das geht beliebig kompliziert). An keiner Stelle wurde irgendeine Binärdarstellung berechnet. Die Darstellung in den Kommentaren dient nur der Erläuterung des Beispiels.

    (Der Computer muss übrigens nicht binär rechnen (die meisten tun es natürlich, da entsprechende Hardware einfach zu bauen ist). Es ist aber garantiert, dass die Bitoperationen tatsächlich auf Binärebene arbeiten, da diese durch die Mathematik definiert sind. Wie das dann in der Hardware implementiert ist, ist der Implementierung überlassen.)


Log in to reply