Binäres Dateischreiben
-
Hi,
ihr kennt doch sicherlich dieses feine Tool "bin2c", jetzt wollte ich das mal reverse zu "c2bin" machen:
#include <stdio.h> #include <stdlib.h> int main (int argc, char* argv[]) { ::FILE* file = NULL; if ((file = ::fopen ("input.txt", "rb")) == NULL) return 0; int c = 0; FILE* out = fopen ("output.txt", "wb"); while ((c = fgetc (file)) != EOF) { if (c == '\r' || c == '\n') continue; if (c == ',' || c == '\t') continue; if (c == ';' || c == '"') continue; if (c == ' ') continue; unsigned char x = c; fwrite(&x,sizeof(x),1,out); } fclose (out); fclose (file); }
Doch er macht nicht das was er soll, habe ich eine Datei "input.txt" mit diesem Inhalt:
"\x00\x00\x00\x00\x9A\xA8\x40", "\x00\x00\x00\x00\x00\x00\x00\x00"
macht er mir eine Datei "output.txt" mit folgendem Inhalt:
\x00\x00\x00\x00\x9A\xA8\x40\x00\x00\x00\x00\x00\x00\x00\x00
Aber das sind keine Binärdaten, da es so wie hier auch im Text-Editor steht.
Dabei habe ich "wb" angegeben.
Also es ist nicht das selbe wie das was ich bei bin2c reingestopft habe, was ich bei c2bin rausbekomme.
Jemand eine Idee?
-
wozu soll das gut sein.
stell dir vor, in der textdatei steht 123ABCwie willst du das binär interpretieren
unsigned int ? (1194684)
unsigned int, string ? (123), "ABC"usw, usw, usw
-
Hi!
Das Problem hierbei ist, dass du die Escape-Sequenzen hier als chars einliest, das heißt, dass du nicht den Hexadezimalwert \x9a einliest, sondern vier chars mit dem Inhalt '\', 'x', '9' und 'a'. Deswegen werden die Werte eben nicht als hexadezimal, sondern als char* angesehen und dementsprechend auch in der Ausgabe übernommen.
EDIT: Ich habe gerade ein wenig gegoogelt und denke, dass es das hier ist, was du brauchst (nicht getestet!).