binärdatei struktur



  • ok, danke



  • wenn ich aber so meinen quellcode habe:

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main()
    {
    	ofstream dat_aus;
    	string dateiname = "binary-datei.prim";
    
    	dat_aus.open(dateiname.c_str(), ios_base::out | ios_base::binary);
    
    	dat_aus << "Test Test Test";
    
    	dat_aus.close();
    
    	return 0;
    }
    

    wird meine datei wie eine textdatei angezeigt und geöffnet (wenn ich das sage), daher meine frage, warum ist dann bei anderen dateien irgendwelche zeichen?



  • Ich glaube du hast einen entscheidenen Denkfehler...
    Sag mir einmal, wie sich eine Binärdatei für dich definiert?

    (a)sie hat die Endung .bin oder ähnliche Binärkürzel
    (b)man beschreibt sie mit einem ios::binary Zusatz in der open-Anweisung
    (c)wenn man eine "echte" Binärdatei öffnet, sieht man nur komische Zeichen, die keiner lesen kann
    (d)man kann alles lesen, es sind aber nur Blöcke aus Binärzahlen da (0111011)
    (e)deine eigene Interpretation

    Bitte zutreffendes ankreuzen 👍

    Wenn das geklärt ist, kann ich dir vllt weiterhelfen 🙂



  • mir ist schon klar, dass alle dateien am computer binärdateien sind und es auf die interpretierweise ankommt. punkt c trifft da am meisten zu.

    wie kann man das machen, das es so eine ausgabe gibt, praktisch das man nur mit dem eigenen programm die datei lesen kann.



  • Du hast für ein Byte 256 Möglichkeiten [0,255].
    Das komische Assehen von Binärdateien Im Editor kommt daher zu Stande, dass viele Bytes <32 oder >127 sind.



  • Dann sprichst du also hier eine Art Fake-Verschlüsslung an...
    Wenn du das erreichen willst, dass keiner deine Datei von außen mit einem Texteditor lesen kann, mach es so wie ich^^

    XOR-Verschlüssung ist so genial wie simple...Man kann den Text mit demselben Schlüssel ver- und entschlüsseln... Dabei entsteht ein unlesebarer Text...
    Verschlüsslung ist allerdings sehr leicht zu knacken 😃 Also nicth für PW´s verwenden...Ist nur fürs Aussehen...

    //Hier sind mal meine Versuche dazu
    //Habe sie bereits erfolgreich getestet
    
        ifstream leseDatei ("output.txt", ios::binary);
        ofstream schreibeDatei("test.txt", ios::binary);
    
        string Schluessel;
        cout <<"Bitte Schluessel eingeben: " ; 
        getline(cin,Schluessel);
    
        int SchluesselLaenge=Schluessel.size();
    
        char x;
        int i=0;
        while(leseDatei.get(x))
        {
        schreibeDatei.put(x ^ Schluessel[i]);
        i++;
        if(i>=SchluesselLaenge)i=0;
        }
    

    Hoffe ich konnte helfen 🙂



  • das heißt, der texteditor versucht immer byteweise einzulesen??



  • Schau dir doch mal eine ASCII-Tabelle an.
    Ab 32 (Leerzeichen) bis 126 haben wir Zeichen, die wir als Text lesen können. Über 126 sinds dann noch Diakritika und sonstige Zeichen.
    In anderen Ländern reicht diese 1 Byte-Codierung nicht aus (Stichwort UNICODE).



  • das heit, ich schreib in meinen quelltext ein ~ schreibe hat das eine eigene bedeutung oder | usw.

    dient dies dazu, das dateien von programmen nicht von jeden richtig interpretiert werden können??



  • Gucky schrieb:

    wenn ich es so mache benutze ich doch ifstresm und ofstream:

    ofstream myfile;
    myfile.open ("example.bin", ios::out | ios::app | ios::binary);
    

    Ja, aber warum nicht das moderne

    ofstream myfile("example.bin", ios::app | ios::binary);
    

    [/quote]
    ?



  • ok, jetzt das modernere

    kann mir trotzdem jemand sagen, warum man das so kompliziert macht (z.B. bei *.3ds so dargestellt wird)??


Anmelden zum Antworten