Noch mal Binärdatei
-
Hallo
ich komme mit meinem Problem nicht weiter.Ich möchte eine (bin)Datei auslesen und diese wieder speichern, wobei sie später in ASCII Form vorliegen soll.
Ich möchte also den bin-Wert (z.B. 37h) in der neuen Textdatei als 37 sehen.Kann mir bitte ein Codebeispiel geben?
MfG
pGL
-
Warum machst du dafür einen neuen Thread auf? Gib den Wert, den du einliest hald mit fprintf() in die neue Datei aus. Bisher gibst du es ja mit printf() am Bilschirm aus, also wirst du das mit fprintf() wohl auch hinbekommen.
-
Ja, das mit dem in die Datei schreiben ist auch kein Problem, das funktioniert wunderbar, nur das richtige auslesen der Zeichen funktioniert nicht so wie ich es will.
-
Und was genau ist dein Problem? Das gleiche wie im 1. Thread von dir? Hast du das Einlesen schon umgestellt?
-
Das Problem ist das selbe, es ist vorerst egal ob die Ausgabe auf dem Bildschirm oder Datei staatfindet.
Ich habe getchar() und fgetchar() ausprobiert aber diese lesen die character vom stdin, und ich habe keine Ahnung wie ich die Daten aus der Datei in den stdin umleiten kann.
-
Ok, es war nicht fgetchar(). Ich hab grad mal kurz über google gesucht. Es gibt eine Funktion namens fgetc(). Diese erwartet einen Dateizeiger (FILE *). Damit sollte es funktionieren.
-
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 dranpGL
-
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