Forum: Projekte & Code Zeichenkonvertierung


von Christian Schiffner (Gast)


Lesenswert?

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

}


von Karl heinz B. (kbucheg)


Lesenswert?

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.

von Christian Schiffner (Gast)


Lesenswert?

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 Karl heinz B. (kbucheg)


Lesenswert?

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?

von Christian Schiffner (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.