www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Int Zahlen zerlegen "Codevision"


Autor: Fichte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hay Leute

Ich möchte gerne eine Int Zahl zerlegen.

Bsp.:

int ganze_zahl = 123456789;

Sollte am ende so aussehen.

int tmp_1=ganze_zahl erste  Stelle;
int tmp_2=ganze_zahl zweite Stelle;
int tmp_3=ganze_zahl dritte Stelle;
int tmp_4=ganze_zahl vierte Stelle;
....
....
....
....
....

Aber alles aus der ganzen_zahl.

Würde das gehen.?
Und wenn wie.?

MFG: Fichte

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>int ganze_zahl = 123456789;

100000000 solange abziehen, bis die Zahl kleiner als 100000000 ist.
100000000 durch 10 teilen und wieder solange abziehen...
Die einzelnen Durchläufe der Stellen einfach zählen...

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es gibt viele möglichkeiten
1) itoa()
2) div/mod in der schleife
3) .. siehe posting above

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einfach itoa dafür missbrauchen, dann hast du jede 10er Stelle als Char 
vorliegen und brauchst nur noch '0' oder auch 0x30 davon abziehen. 
Ansonsten musst halt einfach nur itoa selber programmieren wo dann eben 
die umwandlung in einen String entfällt.

Autor: Fichte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten.

Und wie muss das am ende Aussehen.?
Ich möchte die zahlen gerne via RS232 ausgeben.


MFG: Fichte

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
printf("%d\n",ganze_zahl);

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <stdio.h>
noch vorher einbinden.
123456789 ist ausserdem eine long-Zahl, passt also nicht in int.
Willst du auch long-Zahlen mit printf () ausgeben, Compilereinstellungen 
entsprechend wählen - standardmässig arbeitet printf erstmal nur mit 
int.
printf ist sicher die einfachste Lösung für den Programmierer (und 
funktioniert gatrantiert fehlerfrei) - braucht aber ne Menge flash. Wenn 
du den hast (welcher MC?) kein Problem.
Oben genannte Lösungen gehen deutlich sparsamer damit um.

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>123456789 ist ausserdem eine long-Zahl
Je nachdem. Auf einem 32Bit System ist Int auch 32 Bit.

Autor: Fichte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nutze zum testen einen Mega8 am ende wird es ein Mega128.

der muss mir nur die zahlen zerlegen und dann ausgeben über UART.

MFG: Fichte

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja dann musst halt long nehmen. Ich glaube atoi kann auch nur 16 bit int 
(wie der Name ja schon sagt). Dann muss man eben selber programmieren.

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich meinte natürlich itoa. Aber du kannst ja einfach den Quellcode der 
Funktion entsprechend anpassen. Ist ja nur ein bissl geshifte und 
geteile.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
klar, aber hier gehts nun mal um nen AVR :-)

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>klar, aber hier gehts nun mal um nen AVR :-)
Im µC Forum gehts nicht nur um AVR. Es gibt auch 32 Bit µCs. Das mit dem 
Mega hat sich erst eben herausgestellt.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CodeVision ist aber ein Compiler ausschliesslich für AVR :-)

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja das wusste ich nicht :-) Ich bleib bei gcc.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, das ist das Drama in diesem Forum. Es konnen sehr viele ihre Frage 
nicht formulieren bzw. die nötigen Infos nicht sofort geben.

Autor: Gerhard. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin mir nicht ganz sicher ob ich die Problemstellung verstehe. Wenn 
es nur darum geht eine zahl im 32 bit Format ueber RS232 auszugeben, 
muesste e sdoch mit sprintf ganz leicht gehen:

z.B.

main()
{
    int32 temp = 1234567890;
    char outstring[];

    /* AVR und UART konfigurieren */
    init_AVR();

    /* Zahl in string umwandeln */
    sprintf(outstring, "%d", temp);

    /* String ueber RS232 ausgeben */
    printf("%s\n", outstring);

}

Ist warscheinlich nicht die effizienteste Loesung muesste aber als Demo 
gehen.

Gruss,
Gerhard

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.