1000 er aufteilen & in Array packen

OP #4047514
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';
@ 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!
Gast
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"?
@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.
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.
@ 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");

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.