www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD - Anzeige Immer Func. "ltoa()" oder erst Var-Groesse vergleichen


Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi zusammen,
ich erstelle mir gerade eine kleine Lib zur Ansteuerung meines 
LCD-Displays.

Nun hatte ich erst Probleme mit großen Zahlen, hab da aber hier im Forum 
gelesen, dass itoa() nur bis 16 bit geht und man hierfür ltoa() nimmt 
:-)

Jetzt meine Frage:
Soll ich erst prüfen, ob die Zahl in den 16-Bit Bereich reinpasst und 
dann entweder itoa oder ltoa nehmen, oder einfach immer ltoa?

Wenn ich die Breite der Variable prüfe, würde mir gerade nur einfallen
if(zahl <= 0xFF)
{
}else{
}

Oder gibts da eine elegantere Lösung, quasi wie viele Register gerade 
von der Variable benutzt werden?

Vielen Dank und ein schönes Wochenende
Marcel

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcel schrieb:
> Soll ich erst prüfen, ob die Zahl in den 16-Bit Bereich reinpasst und
> dann entweder itoa oder ltoa nehmen, oder einfach immer ltoa?

Unverständlich?
Wenn du ein int ausgeben willst -> itoa
wenn du ein long ausgeben willst -> ltoa
:-)

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich will quasi eine Funktion machen, die sowohl 8-Bit aber auch bis zu 
32-Bit Werte ausgibt :-)

Mein Prototyp lautet void
 LCD_Display_Number(uint32_t number) 

Wenn meine Zahl, die ich darstellen will, 8-Bit Breit ist, wird sie ja 
als 32-Bit Zahl in der Funktion gehandelt. Soll ich dann immer noch ltoa 
verwenden, oder immer erst prüfen wie groß die Zahl ist und dann ggf. 
itoa verwenden?

Vielen Dank für die schnelle Rückmeldung :)

Grüße
Marcel

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcel schrieb:
> Ich will quasi eine Funktion machen, die sowohl 8-Bit aber auch bis zu
> 32-Bit Werte ausgibt :-)

Naja, in höheren Programmiersprachen wie c++ gibt dafür überladene 
Funktionen, in C benutzt man typischerweise für jeden Typ ne eigene 
Funktion.
(z.B. puts, putc)

> Mein Prototyp lautet void LCD_Display_Number(uint32_t number)
> Wenn meine Zahl, die ich darstellen will, 8-Bit Breit ist, wird sie ja
> als 32-Bit Zahl in der Funktion gehandelt.

Platzverschwendung, aber wems gefällt.

> Soll ich dann immer noch ltoa
> verwenden, oder immer erst prüfen wie groß die Zahl ist und dann ggf.
> itoa verwenden?
Aufwand gegen Nutzen gleich Null, lieber immer ltoa benutzen, spart die 
Casts, die nötig werden um die Warnungen zu ignorieren.

:-) Meine Meinung, keep it simple, stupid and short. :-)

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
O.k Danke :-)

Floh schrieb:
> Platzverschwendung, aber wems gefällt.

Ja klar, nur hab ich nen Impulszaehler gebaut, wodurch meine Variablen, 
die ich anzeigen möchte, sich eben von 8-Bit bis 32-Bit erstrecken. Ich 
könnte jetzt noch eine übergeordnete Funktion schreiben, die checkt, wie 
groß die Zahl ist, und dann die eine (bis 16-Bit Breite) oder andere 
(bis 32-Bit Breite) Funktion aufruft - doch glaub ich, dass hier Aufwand 
und Nutzen sich kompensieren und ich dann immer gleich mit Kanonenkugeln 
auf Spatzen schieße....

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.