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);