Frage zu "fwrite"



  • Hallo,

    ich habe eine kleine Frage zu "fwrite".
    Folgender Quellcode:

    #include <stdio.h>
    
    int main()
    {
    	FILE *fp=fopen("test.dat","wb");
    	if(fp==NULL)
    	{
    		return 1;
    	}
    	unsigned int var=0xF; // ist 15 als Dezimalzahl
    	fwrite(&var,sizeof(var),1,fp); // schreibt "var" in Datei
    	fclose(fp);
    	return 0;
    }
    

    Das Ganze funktioniert zwar, allerdings nicht so wie gewollt.
    Wenn ich mir die Datei, die oben erstellt wird ("test.dat") mit einem Hexeditor anschaue, dann sieht das so aus:

    0f 00 00 00
    

    Die Zahl 15 wird also in das erste der 4 Bytes, die unsigned int zur Verfügung stellt, geschrieben.
    Ich möchte aber, dass die 15 in das letzte Byte (also das 4. Byte) geschrieben wird, so sollte das dann aussehen:

    00 00 00 0f
    

    Wie mache ich das?
    Und hat das ganze zufällig was mit der "Endianness" zu tun?

    lg



  • Jup. Dein System ist halt Littleendian. Du musst die Bytes vorher umtauschen, wenn du es als Bigendian speichern willst.



  • ok... aber wie mache ich das am geschicktesten?





  • danke



  • ... ich glaub, da schreib ich selber einen code...



  • Frage zu fwrite schrieb:

    Hallo,

    ich habe eine kleine Frage zu "fwrite".
    Folgender Quellcode:

    #include <stdio.h>
    
    int main()
    {
    	FILE *fp=fopen("test.dat","wb");
    	if(fp==NULL)
    	{
    		return 1;
    	}
    	unsigned int var=0xF; // ist 15 als Dezimalzahl
    	fwrite(&var,sizeof(var),1,fp); // schreibt "var" in Datei
    	fclose(fp);
    	return 0;
    }
    

    Das Ganze funktioniert zwar, allerdings nicht so wie gewollt.
    Wenn ich mir die Datei, die oben erstellt wird ("test.dat") mit einem Hexeditor anschaue, dann sieht das so aus:

    0f 00 00 00
    

    Die Zahl 15 wird also in das erste der 4 Bytes, die unsigned int zur Verfügung stellt, geschrieben.
    Ich möchte aber, dass die 15 in das letzte Byte (also das 4. Byte) geschrieben wird, so sollte das dann aussehen:

    00 00 00 0f
    

    Wie mache ich das?
    Und hat das ganze zufällig was mit der "Endianness" zu tun?

    lg

    #include <stdio.h>
    
    int main()
    {
    	FILE *fp=fopen("test.dat","wb");
    	if(fp==NULL)
    	{
    		return 1;
    	}
    	unsigned int var=0xF; // ist 15 als Dezimalzahl
        __asm    mov    eax, var
        __asm    bswap  eax
        __asm    mov    var, eax	
        fwrite(&var,sizeof(var),1,fp); // schreibt "var" in Datei
    	fclose(fp);
    	return 0;
    }
    

    🤡



  • Du solltest selbst explizit das Schreibarray bilden:

    unsigned int var=0xF;
    unsigned char a[]={var>>24,var>>16,var>>8,var};
    fwrite(a,4,1,f);
    

Anmelden zum Antworten