mikrocontroller.net

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


Autor: bob (Gast)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
char buf[80];

int wert = 1234;

itoa(wert, buf, 10);  // Dezimal "1234"

itoa(wert, buf, 8);   // Oktal "2322"

itoa(wert, buf, 16);  // Hexadezimal "4d2"

itoa(wert, buf, 2);   // binär "10011010010"

Autor: bob (Gast)
Datum:

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

Autor: Philipp Karbach (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das wusste ich auch noch nicht, interessant :).

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Autor: bob (Gast)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.
uint16_t wert;
int i;

for (i = 0; i < 16; i++)
  buf[15 - i] = (wert & (1 << i)) ? '1' : '0';

Autor: eProfi (Gast)
Datum:

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

Autor: bob (Gast)
Datum:

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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
for  ( mask = 0x8000; mask; mask /= 2 )
  lcd_putchar (  (wert & mask) ? '1' : '0' );

Sehr interessant. Das ist doch mal richtig schönes (kryptisches) C.

;-)

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.