Hallo Leute, ich versuche bei C eine Zahl binär am Display anzuzeigen. Dezimal und Hexadezimal funktioniert es wunderbar aber binär krieg ich das nicht hin. sprintf (buf,"%u",z); lcd_gotoxy(0,0); lcd_puts(buf); ich vermute, dass ich anstatt "%u" was anderes hineinschreiben muss aber es gibt bestimmt sehr viele hier, die es besser wissen :) mfg Bob
Es gibt keinen printf-Formatspezifizierer für binäre Ausgabe. Allerdings kann itoa soetwas, das bekommt als dritten Parameter das zu verwendende Zahlensystem mitgeteilt:
1 | char buf[80]; |
2 | |
3 | int wert = 1234; |
4 | |
5 | itoa(wert, buf, 10); // Dezimal "1234" |
6 | |
7 | itoa(wert, buf, 8); // Oktal "2322" |
8 | |
9 | itoa(wert, buf, 16); // Hexadezimal "4d2" |
10 | |
11 | itoa(wert, buf, 2); // binär "10011010010" |
Danke Rufus für deine Antwort! ich habe es probiert aber danach kam die Meldung "undefined symbol itoa"! muss ich einen bestimmten Header miteinbinden oder itoa als long int deklarieren?
itoa sollte in stdlib.h deklariert sein, aber was spricht dagegen, mal mit grep find findstr in den Headerdateien Deines Compilerd danach zu suchen?
Danke für den Suchtipp! nächstes mal denk ich dran ;) jetzt kommt doe Meldung: "too many parameters in function call" ?? und weist auf "itoa(z, buf, 2)"
Dann unterstützt Deine itoa-Implementierung den dritten Parameter nicht. Das ist natürlich Käse, weil Du Dir dann Deine Binärausgabe selbstschreiben musst.
1 | uint16_t wert; |
2 | int i; |
3 | |
4 | for (i = 0; i < 16; i++) |
5 | buf[15 - i] = (wert & (1 << i)) ? '1' : '0'; |
oder noch eleganter: for(mask = 0x8000;mask;mask/=2) lcd_putchar((wert & mask)?'1':'0'); mask erfüllt dann 2 Aufgaben: die Maskierung des Bits und die Endebedingung der Schleife
Danke Rufus! mit deinem letzten Tip hat es geklappt! und mit dem dritten Parameter hattest du auch recht! So stands im Header: "void itoa(int n,char *str);" mfg Bob
1 | for ( mask = 0x8000; mask; mask /= 2 ) |
2 | lcd_putchar ( (wert & mask) ? '1' : '0' ); |
Sehr interessant. Das ist doch mal richtig schönes (kryptisches) C. ;-)
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.