mikrocontroller.net

Forum: Projekte & Code Zeichenkonvertierung


Autor: Christian Schiffner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);

}


Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian Schiffner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Christian Schiffner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.