Zeichenkonvertierung

Gast #471385
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);

}

#471465
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.
Gast #471519
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.
#471529
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?
Gast #471569
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren