[Erledigt] Binär-Datei einlesen



  • Das ist natürlich korrekt, dass es dann ein float sein sollte.
    Ich habe bisher mehrere Ansätze ausprobiert.
    Es funktioniert leider auch mit einem float nicht.



  • Schreibe erstmal einen Test, der einen float in eine (Binär)Datei schreibt und korrekt wieder liest.
    Erst wenn das funktioniert kannst du dich um die Byteorder der Matlab-floats kümmern.



  • Skywalker077 schrieb:

    Hallo zusammen,
    Nur wenn ich per C eine Datei schreibe mit Float Werten kann ich diese wieder

    Habe ich bereits getan. Das klappt mit diesem Code wunderbar.



  • Rede nicht lange rum, sondern zeige den Code, der angeblich nicht läuft, und nicht den Code, der läuft.



  • Okay,
    zuerst das zum schreiben:

    int main(void)
    {
        FILE *Datei;
        float wert;
        float i;
        Datei = fopen("Signal.txt","wb");
        if(Datei == NULL)
        {
            printf("Die Datei konnte nicht geoeffnet werden");
        }
        else
        {
            //Es soll ein Wert in die Datei geschrieben werden.
            i = 5.5;
            wert = &i;
            printf("Dieser Wert wird jetzt geschrieben: %f",*wert);
            fwrite(wert,sizeof(wert),1,Datei);
            fclose(Datei);
        }
        return 0;
    }
    

    gelesen wird hiermit:

    int main(void)
    {
        FILE *Datei;
        float wert;
        int k;
        Datei = fopen("Signal.txt","rb");
        if(Datei == NULL)
        {
            printf("Die Datei konnte nicht geoeffnet werden");
        }
        else
        {
            //Es soll gelesen werden
            k = fread(&wert,sizeof(wert),1,Datei);
            printf("Es wurden %d Bytes gelesen\n",k);
            printf("Das steht in der Datei: %f",wert);
            fclose(Datei);
        }
        return 0;
    }
    

    Das Schreiben und Einlesen funktioniert bei diesen Schnipseln.
    Ich schaffe es jedoch nicht, den einlese Code zu benutzen fuer mein Problem mit meine Messdaten.



  • Deine Schreib-Funktion ist Müll, da wird alles Mögliche in die Datei geschrieben, aber nicht ein float. Schaue dir die Compilerwarnungen an.



  • Ich kann dir leider nicht folgen.
    Codeblock mit MinGW Compiler bei folgenden Flags:
    -ansi
    -Wall
    -pedantic

    gibt bei dem Code keinen Fehler/Warnung aus.

    Der Einlese Teil funktioniert. Er liest die Zahl(en) ein, die ich vorher schreibe.



  • Trotzdem ist das Müll.

    float wert;
        float i;
    ....
        i = 5.5;
        wert = &i;  // was soll das sein? Du weist einer float-Variablen eine Adresse zu
    
    i = 5.5;
            wert = i;  // oder gleich 5.5
            printf("Dieser Wert wird jetzt geschrieben: %f", wert);
            fwrite(&wert,sizeof(wert),1,Datei);
    


  • Aber mal zu deinem ersten Post.

    Mit

    float wert[4]; // keine Zeiger
    

    in Zeile 4 und

    fread(wert,sizeof(wert[0]),4,Datei);
    

    in Zeile 16, werden auch 4 Werte eingelesen (so sie denn in der Datei sind).



  • Das mit dem Zeiger war mein Fehler. Danke
    Ich denke jetzt habe ich die Werte im Little Endian Format.
    Sie werden leider im Big Endian gespeichert.

    E: ERLEDIGT!
    Danke


Anmelden zum Antworten