Forum: Mikrocontroller und Digitale Elektronik Eine Zahl binär anzeigen am Display


von bob (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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"

von bob (Gast)


Lesenswert?

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?

von Philipp Karbach (Gast)


Lesenswert?

das wusste ich auch noch nicht, interessant :).

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

itoa sollte in stdlib.h deklariert sein, aber was spricht dagegen, mal 
mit grep  find  findstr in den Headerdateien Deines Compilerd danach 
zu suchen?

von bob (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von eProfi (Gast)


Lesenswert?

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

von bob (Gast)


Lesenswert?

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

von Matthias L. (Gast)


Lesenswert?

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