Forum: Mikrocontroller und Digitale Elektronik 1000 er aufteilen & in Array packen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Naj H. (janiiix3)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,


ich möchte gerne auf einer LED Matrix Werte Variable Werte darstellen 
(300 - 2000).

Zehner und Einer kann ich schon darstellen.

Wie bekomme ich es am klügsten hin, Dezimal Zahlen in ASCII umzuwandeln?
Die Zahlen sollten dann in einem String verpackt werden.

Hier ein Beispiel, wie ich es im moment erledige...

  dec_hex_temp[0] = (temp / 10 ) << 4;  // Zehner
  dec_hex_temp[1] = (temp % 10 );    // Einer
  hex_tmp = dec_hex_temp[0] | dec_hex_temp[1];
    
  /* BCD to ASCII */
  temperature[0]    = 'T';
  temperature[1]    = 'e';
  temperature[2]    = 'm';
  temperature[3]    = 'p';
  temperature[4]    = 'e';
  temperature[5]    = 'r';
  temperature[6]    = 'a';
  temperature[7]    = 't';
  temperature[8]    = 'u';
  temperature[9]    = 'r';
  temperature[10]    = ':';
  temperature[11]    = ' ';
  temperature[12]    = (hex_tmp >> 4  ) + 0x30;
  temperature[13]    = (hex_tmp & 0x0F) + 0x30;
  temperature[14]    = ' ';
  temperature[15]    = '°';
  temperature[16]    = 'C';
  temperature[17]    = '\0';


von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
@ Jan H. (janiiix3)

>Wie bekomme ich es am klügsten hin, Dezimal Zahlen in ASCII umzuwandeln?
>Die Zahlen sollten dann in einem String verpackt werden.

Mit der Funktion itoa();


>Hier ein Beispiel, wie ich es im moment erledige...

Grausig. Lies mal ein C-Buch!

von Damian (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> @ Jan H. (janiiix3)
>
> Wie bekomme ich es am klügsten hin, Dezimal Zahlen in ASCII umzuwandeln?
> Die Zahlen sollten dann in einem String verpackt werden.
>
> Mit der Funktion itoa();
>
> Hier ein Beispiel, wie ich es im moment erledige...
>
> Grausig. Lies mal ein C-Buch!

Was ist denn "Gruselig"?

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
Dass du keinerlei Ahnung vom Umgang mit Strings in C hast.

von Damian (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Dass du keinerlei Ahnung vom Umgang mit Strings in C hast.

Wieso hat janiiix3 denn keine Ahnung? Was genau ist an seinem Code denn 
falsch?

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Jedes Zeichen einzeln zuweisen. Das ist ... umständlich.

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
sprintf(temparature, "Temperature: %d%d °C", temp/10, temp%10 )

Geringfügig eleganter.

von Sebastian V. (sebi_s)


Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
>
> sprintf(temparature, "Temperature: %d%d °C", temp/10, temp%10 )
> 
>
> Geringfügig eleganter.

Dann kann man sich die Geschichte mit temp/10 und temp%10 aber auch 
sparen und direkt
sprintf(temparature, "Temperature: %d °C", temp);
schreiben. Ist natürlich etwas langsamer weil allgemeiner.

: Bearbeitet durch User
von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
Sebastian V. O. schrieb:
> Ist natürlich etwas langsamer weil allgemeiner.

Nö.

Eine Zahlenausgabe ist natürlich schneller als 2 Zahlenausgaben + 2 
Divisionen.

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
@Sebastian V. O. (sebi_s)

>Dann kann man sich die Geschichte mit temp/10 und temp%10 aber auch
>sparen und direkt

Nö.

>sprintf(temparature, "Temperature: %d °C", temp);

>schreiben. Ist natürlich etwas langsamer weil allgemeiner.

Dann hat man aber keinen Dezimalpunkt. Wenn man den braucht, geht es so 
nicht.

von Sebastian V. (sebi_s)


Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger schrieb:
> Eine Zahlenausgabe ist natürlich schneller als 2 Zahlenausgaben + 2
> Divisionen.

Ich meinte die Variante mit sprintf ist langsamer als eine spezielle 
Variante, die nur für zweistellige Zahlen funktioniert und ohne sprintf 
auskommt.

Falk Brunner schrieb:
> Dann hat man aber keinen Dezimalpunkt. Wenn man den braucht, geht es so
> nicht.

Von Dezimalpunkt war nie die Rede.

von Matthias (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> sprintf(temparature, "Temperature: %d%d °C", temp/10, temp%10 )
>
> Geringfügig eleganter.

Deutlich resourcenhungriger.

von Naj H. (janiiix3)


Bewertung
0 lesenswert
nicht lesenswert
Wie baue ich meinen "String" (Temperatur :) in "itoa" mit ein..

  itoa(temp,"Temperatur : "temperature,10);

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
@ Jan H. (janiiix3)

>Wie baue ich meinen "String" (Temperatur :) in "itoa" mit ein..

#inlcude <string.h>

strcpy(temperature, "Temperature: ");
itoa(temp, temperature+strlen(temperature), 10);
strcat(temparature, "°C");

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Bei diesen Übungen ist es hilfreich, sich auf eine Schreibweise von 
Variablennamen festzulegen.

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.