f.read((char*)&i, sizeof(int)); ? Kann mir das jemand erklären ???



  • hi,

    ich lerne mich gerade etwas mit streams ein aber hab gerade an einen punkt einen durchhänger.

    was bedeutet denn der folgende code:

    f.read((char*)&i, sizeof(int));
    

    read(BUFFER, COUNT); count heißt wieviel Bytes jeweils eingelesen werden sollen aber für was ist der Buffer und vorallem was bedeutet (char*)&i ???

    (char*)&i heißt doch: einen zeiger vom typ char denn die stelle des im speicher der variablen i zuweisen. oder ?

    bin für hilfe echt dankbar!



  • Du liest binär aus, und schreibst die nächsten <sizeof(int)> Bytes
    in i, welches zu diesem Zweck nach char* konvertiert wird.

    Devil



  • also wenn ich dich richtig verstanden habe heißt das folgendes:

    so sieht z.b. der steam aus:

    while(f)  // lese solange bis ende der datei erreicht wurde
       {
        f.read((char*)&i, sizeof(int));   // Wert von i in char konventieren
       }
    

    |0101110100...|4 Byte|4 Byte|4 Byte|4 Byte|4 Byte|...
    ^
    i = der binäre wert an der gelesenen stelle

    ist das soweit richtig ???



  • ja, so kann man es formulieren.



  • heftig!

    aber was bedeutet denn (char*)&i jetzt und wieso nennt sich das Buffer ?



  • In solchen Fällen hilft das meistens den Kram etwas schöner zu gestalten und benennen(mir zumindest):

    leg mal ne Datei bla.txt an und schreib da ien paar Buchstaben rein, mindestens aber 4.
    Dann probier das:

    ifstream datei("bla.txt");
    int i = 5;
    char* ziel = (char*)&i;
    int anzahl_zeichen = sizeof(int);
    datei.read((char*)&ziel, anzahl_zeichen);
    cout << "habe "<<anzahl_zeichen<< "Zeichen aus bla.txt gelesen und in den Integer 'i' geschrieben, welcher jetzt auf " << i << steht; 
    datei.close();
    

    dazu gibts auch ein gutes Tutorial wo ich das auch mal endgültig von gelernt hab:
    http://www.cpp-home.com/loobian/tutorials/file_io/5.php



  • binary trust schrieb:

    heftig!

    aber was bedeutet denn (char*)&i jetzt und wieso nennt sich das Buffer ?

    int ist 4 Byte gross.
    char 1 Byte. Macht 4*char = 1*int.
    int i = 'a', geht aber auch, da hier der ASCII wert übergeben
    wird. Binär musst du also das Int in einen char* Konvertieren.
    Und Buffer ist in der Regel der Bereich in den Daten geschrieben werden.

    Devil



  • Danke für eure Hilfe !!!


Anmelden zum Antworten