konvertieren von integer zu dezimal

Gast #1562464
Lesenswert?
• ▲
▼
Hi,

gibts irgendeine funktion im Studio die diese aufgabe löst, nicht itoa 
oder printf / sprintf, etwa "itod" ? wenn ja, wo?

habe eine selbst gebastelt, läuft auch ganz gut, nur evtl. ist ja auch 
etwas im AVR STudio vorhanden....

Gruß,
Thorsten

uint16_t Hex2Dez (uint16_t hex)
{
    uint16_t dez=0;

    while(hex>=10000)
    {
        hex-=10000;
    }
    while(hex>=1000)
    {
        dez+=0x1000;
        hex-=1000;
    }
    while(hex>=100)
    {
        dez+=0x100;
        hex-=100;
    }
    while(hex>=10)
    {
        dez+=0x10;
        hex-=10;
    }
    while(hex>=1)
    {
        dez+=0x1;
        hex-=1;
    }
    return dez;
}
Moderator (Firma: Titel) Persönliche Seite #1562497
Lesenswert?
• ▲
▼
Nur zur Begriffsbestimmung:
Du willst von Integer nach BCD umwandeln.
(BCD = Binär codiertes Dezimalsystem)

Vielleicht hilft dir das bei der Suche etwas weiter.

EDIT:
Allerdings gibt es da das Problem, dass du in 2 Bytes (uint16_t) nur 4 
BCD-Stellen unterbringst. Dein integer-Wert darf also nur von 0...9999 
gehen... :-o

Aber ich habe den stillen und heimlichen Verdacht, dass du im tiefsten 
Inneren eigentlich ganz was Anderes willst.
Gast #1562572
Lesenswert?
• ▲
▼
Hi,

ja, ich benötige eine "dezimale" zahl in einem binären Format - nichts 
dramatisches, so wie man es "immer" braucht. Wenn in meiner Routine der 
Wert größer 9999 wird, dann schert sie das nicht viel, das 
Rückgabeformat war so gerade günstig, das die 4 BCD ziffern schön wieder 
in einen uint16_t passten, muss aber nicht "packed" sein, sollte 
allerdings auch nicht unnötig größer sein als das was ich dort oben 
getrieben habe....ich wollte eigentlich nur wissen ob das studio etwas 
vergleichbar einfaches wie meines mitbringt - ich gehe nun mal davon 
aus, das dies nicht so ist.

Gruß,
Thorsten
#1562578
Lesenswert?
• ▲
▼
Thorsten S. schrieb:

> ja, ich benötige eine "dezimale" zahl in einem binären Format - nichts
> dramatisches, so wie man es "immer" braucht.

"immer" ist relativ :-)

> Rückgabeformat war so gerade günstig, das die 4 BCD ziffern schön wieder
> in einen uint16_t passten, muss aber nicht "packed" sein,

packed bedeutet in diesem Zusammenhang eigentlich nur, dass 2 'Ziffern' 
in 1 Byte untergebracht werden.

> sollte
> allerdings auch nicht unnötig größer sein als das was ich dort oben
> getrieben habe....ich wollte eigentlich nur wissen ob das studio etwas
> vergleichbar einfaches wie meines mitbringt

'Studio' bringt überhaupt nichts mit.

Was du suchst, ist eine C-Funktion, die der C-Compiler (eigentlich seine 
Runtime Library) mitbringt.
Und nein. Mangels Nachfrage gibt es keine derartige Standardfunktion. So 
wie du das hast, ist das schon ok.
Gast #1562602
Lesenswert?
• ▲
▼
Hi KH,

deswegen ja auch die "" beim immer...

2 Ziffern in 1 Byte ähnlich wie 4 Ziffern in 2 Byte, ich denke es geht 
hervor das Peter und ich das selbe meinten...

danke für die KLARE Rückmeldung. Studio und gcc+rtl sind für mich ein 
Paket, da ich sie nicht getrennt nutze, entschuldige diese 
"oberflächliche" ausdruckweise, aber es passte für mich einfach besser 
zum neveau der Frage.

Gruß,
Thorsten
#1562908
Lesenswert?
• ▲
▼
Thorsten S. schrieb:
> das
> Rückgabeformat war so gerade günstig, das die 4 BCD ziffern schön wieder
> in einen uint16_t passten

Und was bringt das?
Wichtig ist doch nur, welches Format Du hinterher brauchst.
Unnötige Zwischenschritte kosten nur Code und Rechenzeit.

Deinen Code:
1
...
2
    while(hex>=1)
3
    {
4
        dez+=0x1;
5
        hex-=1;
6
    }
7
...
kann man einfacher schreiben:
1
        dez += hex;

> ich gehe nun mal davon
> aus, das dies nicht so ist.

Das stimmt.
BCD-Arithmetik wird kaum noch verwendet.


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.