unsigned long long ausgabe

Gast #2264704
Lesenswert?

Hallo da es mir winavr nicht möglich ist 64Bit Zahlen via RS232 aus zu 
geben, habe ich mir versucht eine eigene Funktion zu schreiben, nur 
leider bin ich am verzweifel weil ich sie einfach nicht richtig zum 
laufen bekomme... vellt kann ja einer mal drüber schauen:)

void printLongLong(uint64_t value)
{

    printfHex64(value);
    uint16_t digits = 0;
    uint64_t valueCopy = value;

    while (valueCopy > 0)
    {
       valueCopy = valueCopy / (uint64_t)10;
       digits++;
    }

    valueCopy = value;

    // eight digits can be casted in 32bit
    while (digits > 9)
    {
        uint64_t difference = pow((double)10, (double)(digits - 1));
        uint8_t currentDigit = valueCopy / difference;
        valueCopy = valueCopy - (difference * (uint64_t)currentDigit);
        digits--;
        printf("%c", currentDigit);
    }
}



Vielen Dank

Dominik
#2264923
Lesenswert?

ach ja, da war noch eine Ausgangsfrage...
- Man bekommt di egwünschte Ziffernfolge, indem man fortgesetzt die
  Zahl modulo 10 rechnet (gibt die letzte Ziffer) und dann nochmal
  die Zahl nimmt und durch 10 teilt; damit fängt dann wieder an mit
  modulo etc.
- Wenn man dadurch die Ziffern in der falschen Reiehnfolge hat, muß
  man halt drehen.
  Würde man vorher wissen, wieviele Stellen man bekommt, könnte man
  gleich in der richtigen Reiehenfolge ablegen.
- mit pow() rechnen, ist hier nicht sehr sinnvoll.
  pow() ist eine Gleitkommafunktion, die erstens sehr langsam ist
  für AVR-Verhältnisse, und zweitens die Gleitkommalib benötigt,
  und drittens dem armen Programmierer mit Rundungsfehlern das Leben
  schwer macht.
- "einfach nicht richtig zum laufen bekomme" ist keine besonders
  genau Aussage :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren