itoa() (utoa(), ltoa(), ultoa(), ftoa()

Hallo,
seid 2 Tagen hampel ich mit dem Zeug´s rum.
Ich schein das auch gefressen zu haben. Es wird ausgegeben und angezeigt was
ich sehen will.
Aber- ich habe:

uint32_t volumesize;

volumesize hat den Wert von 3956744192, das ist unsigned long

also

char SKB[4];
ultoa(volumesize,SKB,10);
Serial2.print(SKB);

das funktioniert. Sehr schön…

char SKB[x];

Was ist hier "x"?
Ist das jetzt die Speicherbelegung des Zahlentyp (unsigned long),
oder der des ASCII?

Den des Zahlentyp weiß man ja, aber den des ASCII?
Wie setzt man denn "x" sicher- richtig?
Gruß und Dank
Andreas

Da volumesize 10 stellig ist, sollte das Array mindestens 11 Stellen haben.

x ist die Stelle in char Array SKB

Also SKB[0] ist '3'
SKB[1] ist '9'

Das steht da in ASCII drin, also 48 dazuzählen, dann erhälst du den Inhalt, der tatsächlich drin ist in byte, nämlich 51 und 57

Irrtum nicht ausgeschlossen

Ein Byte pro Zeichen. +1 für den Terminator. Bei Dezimal ist das einfach die Anzahl der Stellen. Plus evtl. ein Vorzeichen. Bei Float kommt der Punkt dazu. Wenn man mit anderen Zahlensystem arbeitet (z.B. Binär) muss man darauf achten wie viele Zeichen dabei rauskommen.

ftoa() gibt es auf den AVRs nicht. Dafür gibt es dtostrf()

Hallo,
vielen Dank euch beiden.

"ftoa() gibt es auf den AVRs nicht. Dafür gibt es dtostrf()"
Das "wußte" ich noch.

char SKB[4] und ultoa

ist dann aber gefährlich. Denn mit

SKB[4]

funktioniert "3956744192" ja. Es wird also nicht auf Richtigkeit geprüft.
Gruß und vielen Dank
Andreas

Es wird also nicht auf Richtigkeit geprüft.

Gut erkannt!
Nachfolgende Variablen werden stumpf überschrieben.

Hilfe!
Mein UNO stürzt dauernd ab!

Das ist einer der größten Fehlerquellen in C. Was meinst du wieso es ständig gravierende Bugs mit Puffer-Überlaufen gibt?