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


von Fichte (Gast)


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

von STK500-Besitzer (Gast)


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...

von daniel (Gast)


Lesenswert?

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

von Timmo H. (masterfx)


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.

von Fichte (Gast)


Lesenswert?

Danke für die Antworten.

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


MFG: Fichte

von Klaus (Gast)


Lesenswert?

printf("%d\n",ganze_zahl);

von crazy horse (Gast)


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.

von Timmo H. (masterfx)


Lesenswert?

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

von Fichte (Gast)


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

von Timmo H. (masterfx)


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.

von Timmo H. (masterfx)


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.

von crazy horse (Gast)


Lesenswert?

klar, aber hier gehts nun mal um nen AVR :-)

von Timmo H. (masterfx)


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.

von crazy horse (Gast)


Lesenswert?

CodeVision ist aber ein Compiler ausschliesslich für AVR :-)

von Timmo H. (masterfx)


Lesenswert?

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

von Martin (Gast)


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.

von Gerhard. (Gast)


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

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.