AVR int64_t in char[] umwandeln

#455995
Lesenswert?

hallo leute,

vorabinfos:
cpu: avr - mega128
compiler: winavr(aktuell)

ich möchte eine int64_t zahl in einen string umwandeln damit ich ihn 
mitdem uart ausgeben kann.

ich habs auf diese art versucht:

int64_t zahl;
char  puffer[40];

zahl=...;

sprintf(puffer, "%d",(int64_t)zahl);

ich hab mir schon die doku zur libc durch gesehen und kapiert dass 
sprintf auf vfprintf() zurückzuführen ist.
aber kann vfprintf mit irgenteinem flag 64bitter konvertieren?

ich hoffe ich habs halbwegs rübergebracht was ich nicht hinbekomme.

danke schon mal im vorraus, danie
#456007
Lesenswert?

hallo  Karl heinz
danke schon mal für die schnelle AW,

dass das so nicht klappt ist mir schon klar.
ich find nur in der doku nix passendes was ich satt &d oder %i verwenden 
müsste, die schalter die ich gefunden habe gehen bis max 32 bit, aber 
das hilft ja nicht, aber ich bin mir auch nicht sicher ob ich an der 
richtigen stelle suche ...
Gast #456015
Lesenswert?

Die Register waren nur bei mir zum Test, sonst optimiert doch der 
Compiler alles weg...

Vielleicht macht mein Programm auch niet 100% das was du willst, so 
wie's aussieht willst du ja ASCCII-Darstellung, mein Code erzeugt nur 
ein Byte-Array. Wenn dir das reicht (Die 8 Bytes) dann passt das.
#456017
Lesenswert?

> ich hab gerade noch nach den itoa varianten gesucht, die können auch nur
> bis max 32 bit :-(
>
> muss ich das etwa von hand machen?

Ich fürchte fast. In den Header Files bin ich bis auf
den Hinweis auf %lld auch nicht fündig geworden.

Muss es denn unbedingt int64_t sein?
#456146
Lesenswert?

also %lld und %lli funktionieren nicht.

da bekomm ich nur mist.

variable: -1 wird als 855703680 ausgegeben, das macht irgentwie keinen 
sinn.

ich werd wohl mal den iterativen hammer auspacken.


int64 muss leider sein, das der datensatz derart groß sein kann

dennoch mal danke
#456191
Lesenswert?

das ist klar,
in hex kein problem.
ich brauchs dummerweisse in dez

ich machs nun iterativ:


rechnen   variable%10     <-   ausgeben
 |        varibale /=10        ^
 |                             |
 |        variable%10     <-   ausgeben
 |        variable /=10        ^
 |                             |
 |        variable%10     <-   ausgeben
 |        variable /=10        ^
 |                             |

 .        .                    .
 .        .                    .
 .        .                    .

 |        variable%10     <-   ausgeben
 |        variable /=10        ^
 |                             |
 |->      variable        ->   ausgeben



damit werden die variablen immer genau eine stelle lang.

man sollte vorher auf >0 abtesten und damit das vorzeichen bestimmen.


vielen dank an alle die mitgedacht haben.
grüße danie
Gast #456199
Lesenswert?

20 Stellen?

Peter Dannegger hat in der Codesammlung eine Routine zur Division von 
32Bit-Zahlen veröffentlicht.
Die muß man nur (sollte auch ohne Probleme gehen) auf 64Bit erweitern.

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