Forum: Mikrocontroller und Digitale Elektronik Hex zu Dezimal wandeln in c


von Yvonne J. (laserlight)


Lesenswert?

Hi,

ich habe hier letzt in irgendeinem C code eine sehr kurze und einfache 
Lösung gesehen um einen Hexwert(Binärwert) in einen Dezimalwert(BCD) 
umzurechnen. Es war ein zweizeiler in einer while schleife, finde ihn 
nur nicht wieder...

Wenn jemand weiß wo das ist, bitte um Rückmeldung.

Vielen Dank,
Yve

von Falk B. (falk)


Lesenswert?


von Tropenhitze (Gast)


Lesenswert?

>eine sehr kurze und einfache Lösung

itoa() ist sehr kurz.

von Yvonne J. (laserlight)


Lesenswert?

Hi,

danke für die Tips, aber ich suchte explizit dieses Beispiel. Ich wollte 
keinen Modulo verwenden und auch keinen String als Ergebnis.

Ich habe meinen Fehler nun gefunden, und es funktioniert.

uint32_t conv_hex2dez (uint16_t hex)
{
    uint16_t div=10000;
    uint32_t add=0x10000;
    uint32_t dez=0;
    while(hex)
    {
        dez+=(add*(hex/div));
        hex-=(div*(hex/div));
        div/=10;
        add/=0x10;
    }
    return dez;
}

Vielen Dank,
Yve

von Peter D. (peda)


Lesenswert?

Yvonne J. schrieb:
> Ich habe meinen Fehler nun gefunden, und es funktioniert.

Na dann schau einmal ins Listing und laß ihn im Simulator laufen.
Du wirst sehen, daß er deutlich größeren Code erzeugt und deutlich 
länger braucht, als die abgelehnten Standardlösungen.

Warum willst Du unbedingt um Längen schlechteren Code benutzen, als den 
der Standard-Library des Compilers?


Ist Dir der Flash zu groß, nimm nen kleineren MC.
Ist er Dir zu schnell, schalte den CPU-Takt runter.


Peter

von Yvonne J. (laserlight)


Lesenswert?

Hallo Peter,

danke für den Hinweis - hätte ich nicht gedacht. Ich habe nun doch die 
my_itoa geschichte genutzt und etwas getrixt.

Danke,
Yve

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.