Hallo Freunde, bräuchte mal Hilfe bei einem kleinen Progrämmchen,das aus einer Datei einfache Zeichen z.b. 05 03 1D 2F 3D 32 34....(dazwischen Leerzeichen)in eine 2.Datei als hexadezimale Zeichen einließt und die Leerzeichen herausfiltert.Also der hexadezimale Wert dieses Zeichens,z.b.für Zeichen 10 eben A.Eigentlich total easy aber irgendwie häng ich fest.Hoffe auf Hilfe!! main() { char var[2048]; FILE *point,*point2; point =fopen ("data_neu","r"); point2 =fopen ("data_neu_1","w"); while(1) { fscanf( point, "%x ", &var); fprintf( point2,"%x\n",var); } fclose (point); fclose (point2); }
var soll kein Array sein. Wozu auch? Du liest eine Zahl ein (in eine unsigned char Variable) und schreibst diese Zahl auf das neue File. Das Leerzeichen im Formatstring vom fscanf würde ich auch entfernen. Beim einlesen von Zahlen werden führende Leerzeichen, Tabulatoren, CR/LF ohnehin vom fscanf ausgefiltert. Alternativ könntest du dir überlegen ob du anstelle des Dampfhammers fscanf() das Ganze nicht mit dem Goldschmiede- hämmerchen fgetc/fputc machen willst. Mit fgetc() ein Zeichen lesen. Wenn es nicht ' ', '\t', '\n' war, mittels fputc auf die neue Datei schreiben.
Das stimmt.Der Array ist unsinnig.Das Problem was ich grad habe,ist das ich Daten verarbeiten muss die aus einem Hexeditor kopiert und in eine Datei geschrieben wurden(unsinniger Weise).Diese liegen mir jetzt als ASCII-Zeichen in dieser Datei vor und müssen wieder in eine 2.Datei in ihrer ursprünglichen Form zurückkonvertiert werden.Daher bekomme ich bei fgetc das Problem das die Konvertierung wegfällt.Oder gibts da nen Trick? In Matlab(meines Erachtens die perfekte Programmiersprache) gehts total easy mit: h=fopen('k.txt','rt'); a=fgetl(h); b=sscanf(a,'%x'); Aber C bereitet mir Kopfschmerzen.
Von welcher Konvertierung redest du eigentlich die ganze Zeit?
Musst du aus einer ASCII Hex Datei wieder eine binäre
Form machen?
Wenn ja:
OK fscanf macht das, klar. Schreiben kannst du trotzdem
einfacher mit fputc.
Ansonsten: Ist doch kein Problem aus 2 ASCII Hex-Charactern
wieder die Zahl zusammenzusetzen
unsigned char convNibble( char Character )
{
if( Character >= 0 && Character <= 9 )
return Character - '0';
if( Character >= 'A' && Character <= 'F' )
return Character - 'A' + 10;
if( Character >= 'a' && Character <= 'f' )
return Character -'a' + 10;
return 0;
}
....
int c1, c2;
unsigned char Total;
while( ( c1 = fgetc( file1 ) ) != EOF &&
( c2 = fgetc( file2 ) ) != EOF ) ) {
Total = convNibble( c1 ) * 16 + convNibble( c2 );
fputc( Total, file2 );
}
> Aber C bereitet mir Kopfschmerzen.
Warum nimmst du das dann ohne entsprechendes Lernen der
Grundlagen?
Danke für den Code.Probiers mal.Mit den Kopfschmerzen ist das so eine Sache.Stecke in den Kinderschuhen der C-Erlernung.Habe nach einem 3zeiligen Pendant des Matlabs in C gesucht.Eigentlich sollte noch eine dialogfeldbasierte Anwendung zur Visualisierung der Daten folgen,aber angesichts des Aufwands bleibts vielleicht doch bei Matlab.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.