binäre datei einlesen



  • Ich möchte folgedes machen:

    Binäre Datei einlesen. In der Datei sind 3 byte paare die immer zusammengehören, d.h. ich les die ersten 3 bytes ein, dann die nächsten 3 usw. bis ich bei EOF angekommen bin.

    Kann mir jemand kurz auf die Sprünge helfen wie ich das mache? Ich hänge an den Punkt wie ich eine Position(Pfeil) in der Datei finde den ich immer um 3 Bytes weiterschieben kann.

    vielen dank!



  • struct {
         int height;
         int width;
       } rectangle;         
    
    using namespace std;
    
    ifstream in("hw.txt");
    
       in.read( (char *)(&rectangle), sizeof(rectangle) );
       if( in.bad() ) {
         cerr << "Error reading data" << endl;
         exit( 0 );
       }
    

    struct muss gepackt sein.



  • Jomotix schrieb:

    In der Datei sind 3 byte paare die immer zusammengehören, d.h. ich les die ersten 3 bytes ein, dann die nächsten 3 ...

    3-Byte-Paare, für mich der Ausdruck des Tages! Quasi drei Byte-Zwillinge... 😃

    P.S.: Wenn du nicht weiterkommst, dann zeig am Besten ein wenig Code mit der Stelle, an der es hakt. Dann kann man dir besser helfen. Ansonsten such mal nach fopen/fread oder fstream.



  • danke 🙂 ich weis ich hab mich blöd ausgedrückt .. aber danke ich werds gleich mal ausprobieren



  • struct nutzer schrieb:

    struct {
         int height;
         int width;
       } rectangle;         
    
    using namespace std;
    
    ifstream in("hw.txt");
    
       in.read( (char *)(&rectangle), sizeof(rectangle) );
       if( in.bad() ) {
         cerr << "Error reading data" << endl;
         exit( 0 );
       }
    

    struct muss gepackt sein.

    scherz ? 😕

    wenn dann wohl

    #pragma pack(1);
    struct {
    char a, b, c;
       } rectangle;    
    #pragma pack();
    

    @Jomotix
    Du brauchst nichts weiterschieben, den Dateizeiger setzt die Funktion intern automatisch immer 3 Byte weiter.
    Einfach immer nur einlesen, bis EOF:

    #include <stdio.h>
    
    int main()
    {
    	char* your_file = "file";
    	char buf3byte[3] = {0};
    	FILE* fp;
    
    	fp = fopen(  your_file, "rb" ); 
    
    	if ( !fp )
    		return 1;
    
    	while( !feof(fp) )
    	{
    		fread( buf3byte, sizeof( char ), sizeof( buf3byte ), fp );
    		if( ferror(fp ))
    			return 1;
    
    		// .. mach was mit den 3 byte
    	}
    
    	fclose(fp);
    	return 0;
    }
    

    p.s.
    C++ kann das auch.



  • Kleine Ergänzung: Falls du den Dateizeiger doch mal verschieben willst/musst, dann geht das mit fseek.


Anmelden zum Antworten