M. D. schrieb:
> Das lässt mich darauf schließen das irgendwo die Zahlen in Ascii
> umgewandelt werden, da diese ab 48 mit der 0 beginnen.
>
> Ich sende vom PC aus, indem ich eine
>
Variable erzeugt habe, diese dann mit
>
1 | > ausdatei = fopen(com3:,"w");
|
> einstelle, und dann mit
>
1 | fprintf(ausdatei,"%i", x);
|
> ausgebe.
Ja, da wird tatsächlich ein Text, der die Zahl darstellt übertragen.
Für die Zahl 32, wird der Text "32" generiert, also die Zeichen '3' und
'2' und die nacheinander im File gespeichert, bei dir eben über die
serielle Schnittstelle übertragen.
Das ist genau das was alle printf-Funktionen, sei es printf, sprintf,
fprintf machen.
> Sobald ich das %i im fprintf gegen %c austausche funktioniert der
> Datenempfang richtig, d.h. auch die LED´s, die die 32er, 64er und 128er
> Stelle anzeigen sollen leuchten dann korrekt.
>
> So, nun meine Frage. Wieso ist das so?
Weil bei %c das printf davon ausgeht, dass im übergebenen Argument, bei
dir x, schon der ASCII Code enthalten ist. Oder in C-Speak, da wird
bereits ein Zeichen übergeben. Daher muss man nicht erst aus einer Zahl
eine Zeichenfolge machen.
printf( "%i", 65 );
%i sagt, dass das Argument (65) eine Zahl ist und diese in lesbarer Form
ausgegeben werden soll. Also wird daraus der Text "64" generiert und
dieser ausgegeben. Zum Ausgabegerät werden die ASCII Codes 54 und 53
geschickt. Als Folge davon: Auf deinem Monitor steht lesbar: 65
printf( "%c", 65 );
%c sagt, dass das Argument (65) bereits ein Zeichen ist. Da muss nichts
konvertiert werden. Die 65 werden als Code zum Ausgabegerät geschickt,
welcehs für einen ASCII Code von 65 ein 'A' anzeigt.