Forum: Mikrocontroller und Digitale Elektronik unsigned long long ausgabe


von Dominik (Gast)


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

von Dominik (Gast)


Lesenswert?

Also mit Rs232 ist falsch ich meine natürlich mit der printf Funktion ;)

von Dominik (Gast)


Lesenswert?

Kann mir keiner helfen?

von Klaus W. (mfgkw)


Lesenswert?

Doch, die Suchfunktion!

Die findet z.B. Beitrag "uint64_t nach char[]"

Z.B. kannst du dort mit meiner uint64toa() in einen String konvertieren, 
und dann den ausgeben.

von Purzel H. (hacky)


Lesenswert?

Man sollte sich wirklich mal die Muehe nehmen und ein Byte nach Hex 
umwandeln. Das sind einige wenige Zeilen. Dann ein 64bit ... ist 8 mal 
ein Byte.

von Klaus W. (mfgkw)


Lesenswert?

Dann hat man vielleicht eine Hexadezimaldarstellung im besten Fall.
Und wie kommt man von da nach dezimal - falls das gewünscht ist?

von Sven H. (dsb_sven)


Lesenswert?

Wenn ich mit die Codezeilen oben angucke, sieht es eher so aus, als 
wollte Dominik die Zahl nicht als Hex ausgeben sondern dezimal.

von Klaus W. (mfgkw)


Lesenswert?

BTW: kennt jemand noch den Unterschied zwischen BINÄR und DUAL?

von Sven H. (dsb_sven)


Lesenswert?

grml. Klaus war schneller.

von Sven H. (dsb_sven)


Lesenswert?

Ist das duale System nicht das mit dem grünen Punkt?

von Klaus W. (mfgkw)


Lesenswert?

falsche Antwort

von Klaus W. (mfgkw)


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 :-)

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.