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


von Jan H. (janiiix3)


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

von Falk B. (falk)


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)


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)


Lesenswert?

Dass du keinerlei Ahnung vom Umgang mit Strings in C hast.

von Damian (Gast)


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


Lesenswert?

Jedes Zeichen einzeln zuweisen. Das ist ... umständlich.

von Falk B. (falk)


Lesenswert?

1
sprintf(temparature, "Temperature: %d%d °C", temp/10, temp%10 )

Geringfügig eleganter.

von Sebastian V. (sebi_s)


Lesenswert?

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

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

: Bearbeitet durch User
von Peter D. (peda)


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)


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)


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)


Lesenswert?

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

Deutlich resourcenhungriger.

von Jan H. (janiiix3)


Lesenswert?

Wie baue ich meinen "String" (Temperatur :) in "itoa" mit ein..
1
  itoa(temp,"Temperatur : "temperature,10);

von Falk B. (falk)


Lesenswert?

@ Jan H. (janiiix3)

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

1
#inlcude <string.h>
2
3
strcpy(temperature, "Temperature: ");
4
itoa(temp, temperature+strlen(temperature), 10);
5
strcat(temparature, "°C");

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

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.