Noch mal Binärdatei



  • Ich habe es mit fgetc() getestet und das Ergebnis ist das selbe wie am Anfang,
    bei hex-Zahlen wie EC, E2, BF, 80 und C4 schreibt er immer ffffff davor.

    Gibt es eine Möglichkeit um die Ausgabe auf max 2 Zeichen zu reduzieren?

    Mit printf("\n%02x",ch) sagt man nur das minimum 2 Zeichen ausgegeben werden sollen.



  • Hi,

    wenn Du nur ein byte benötigst, dann nimm doch auch nur ein byte zu speichern. Einen char zum bsp.
    Um Deinen Qualen ein Ende zu bereiten, hab ich da mal was zusammengetippt.

    #include <cstdio>
    
    int main(){
    
         FILE *eingang=fopen("c:\\test.txt","rb");
         FILE *ausgang=fopen("c:\\test1.txt","w");
    
         char buffer;
    
    	 while(! feof(eingang) ){
    
    		 fread(&buffer,1,1,eingang);
    		 fprintf(ausgang,"%02X",buffer);
    
    	 };
    
        return 0;
    
    }
    

    ich hoffe, das hilft Dir weiter.

    grüße Con@n



  • Vielen Dank,
    aber dein Programm macht das selbe wie meiner,
    bei diesen ASCII Zeichen: EC,E2,BF,80, C4... hängt er einfach FFFFFF vorne dran

    pGL



  • Hi,

    dann poste Dein Prog mal. Das was ich da zusammengetippelt hab funktioniert bei mir ganz wunderbar. Ohne das die Zahlen negativ sind. Vielleicht liegt Dein Fehler ja woanders.

    grüße Con@n



  • Oder in der Datei!



  • Das nicht,
    bei jeder Datei passiert das selbe.
    Bei denen aus dem EPROM und bei denen die ich zB mit UEdit erstellt habe.



  • Das hilft immer noch nicht weiter. Zeig doch mal was vom Quellcode. Die Glaskugeln sind leider aus, und ein "das geht nicht" bringt nicht wirklich weiter.



  • Hier ist mein Code:

    #include <stdio.h>
    
    int main ()
    {
    	FILE *Quelle;
    	int i;
    	char ch,fname[] = "test.bin";
    
    	Quelle = fopen(fname,"rb");
    	if (Quelle == NULL)
    		printf("\n\nQuelldatei nicht geöffnet!\n");
    	else
    	{
    		for (i=0;i<30;i++)
    		{
    			fscanf(Quelle,"%c",&ch);
    			printf("\n%02x",ch);
    
    		}
    
    		fclose(Quelle);
    	}			
    	return 0;
    }
    

    Versuche es mal mit einer bin-Datei.

    Die Ausgabe Bildschirm oder Datei ist egal.



  • Was macht dich so sicher, dass 30 Zeichen in der Datei sind? Und bitte verwende fgetc() anstatt fscanf(), wenn du eh nur ein Zeichen einliest. Wenn du eine Dokumentation hast, dann schau mal nach was fgetc() oder auch fscanf() zurückliefern, falls ein Fehler auftritt. Das solltest du nämlich abfangen 😉



  • Die Dateien sind natürlich nicht 30 Byte lang, ich wollte die Ausgabe etwas minimieren.

    Ich habe übrigens main Problem gelöst, aber mit C++
    Hat hier aber nichts zu suchen.

    Gruss pGL


Anmelden zum Antworten