Hallo,
ich lasse mir eine email aus dem NET IO mit folgendem Code senden
(s.unten):
Kurz gesagt, ich sende mir die Zeit wann die Dämmerung eingesetzt hat.
Wenn das jetzt um z.B.: 19:06:03 Uhr passiert ist. Bekomme ich als mail
19:6:3 -> die Nullen werden "abgeschnitten". An Sich ja auch
logisch...gibt es jedoch eine Möglichkeit die Nullen mit in die email zu
packen? Ist halt nur ne rein optische Sache, der Lesbarkeit wegen...
Vielen Dank!
uint8_t iDaemmerung_hh;
uint8_t iDaemmerung_mm;
uint8_t iDaemmerung_ss;
1
strcpy_P(&mail_buffer[z],PSTR("\r\n\r\nDämmerung: "));//copy mail text
2
z+=15;
3
4
mail_length1=0;
5
6
7
//itoa (iDaemmerung_hh,conv_buffer,10); //convert temp value
8
itoa(iDaemmerung_hh,conv_buffer,10);//convert temp value
Du könntest jeweils prüfen, ob die Zahl einstellig ist (<10) und dann
vorher eine "0" in den mail_buffer schreiben.
Alternativ, wenn Du genügend Speicher frei hast, kannst Du auch sprintf
verwenden. Ist halt universell einsetzbar, braucht aber Platz. Sieht
aber im Code viel besser aus.
Hallo,
Die Länge des Strings nach der Convertierung mit itoa ermittelst du ja
schon, dann füge doch einfach noch eine '0' ein wenn der String nur ein
Zeichen lang ist.
Sascha
>Sorry, aber das Ganze sieht ein wenig aus nach "wie mache ich es>möglichst umständlich".
Bah, alles in eine Zeile;)
sprintf("%02i:%02i:%02i",(int)iDaemmerung_hh),(int)iDaemmerung_mm),(int)
iDaemmerung_ss));
>Bah, alles in eine Zeile;)>>sprintf("%02i:%02i:%02i",(int)iDaemmerung_hh),(int)iDaemmerung_mm),(int )>iDaemmerung_ss));
Sorry hab da was vergessen.
sprintf(conv_buffer,
"%02i:%02i:%02i",(int)iDaemmerung_hh),(int)iDaemmerung_mm),(int)
iDaemmerung_ss));
holger schrieb:>>Bah, alles in eine Zeile;)>>>>sprintf("%02i:%02i:%02i",(int)iDaemmerung_hh),(int)iDaemmerung_mm),(in t)>>iDaemmerung_ss));>> Sorry hab da was vergessen.>> sprintf(conv_buffer,> "%02i:%02i:%02i",(int)iDaemmerung_hh),(int)iDaemmerung_mm),(int)> iDaemmerung_ss));
Wenn du es gleich in die mail einsetzt, dann braucht er sich auch nicht
die Finger brechen, wie er den Teilstring möglichst kompliziert in die
Mail einsetzt
fertig. Ersetzt den kompletten Code aus dem Eröffnungsposting. Ok, um
das z müsste man sich noch kümmern, falls man das überhaupt braucht.
An den TO.
Du solltest dir dringend in deinem C-Buch das Kapitel über Strings
ansehen und lernen mit den str Funktionen umzugehen (auf dem AVR gibt es
auch die jeweiligen xxx_P Funktionen dazu wo sie sinnvoll sind). So
etwas
Karl Heinz schrieb:> Ok, um> das z müsste man sich noch kümmern, falls man das überhaupt braucht.
sprintf gibt die Anzahl der ausgegebenen Zeichen zurück.
Daher ist auch das einfach
> sprintf_P( &mail_buffer[z], PSTR("\r\n\r\nDämmerung: %02i:%02i:%02i"),> (int)iDaemmerung_hh),(int)iDaemmerung_mm),(int)> iDaemmerung_ss );
was soll eigentlich diese int casterrei?
http://www.gnu.org/software/libc/manual/html_node/Calling-Variadics.html#Calling-Variadics
[...]
Since the prototype doesn’t specify types for optional arguments, in a
call to a variadic function the default argument promotions are
performed on the optional argument values. This means the objects of
type char or short int (whether signed or not) are promoted to either
int or unsigned int, as appropriate; and that objects of type float are
promoted to type double. So, if the caller passes a char as an optional
argument, it is promoted to an int, and the function can access it with
va_arg (ap, int).
[...]
Peter II schrieb:>> sprintf_P( &mail_buffer[z], PSTR("\r\n\r\nDämmerung: %02i:%02i:%02i"),>> (int)iDaemmerung_hh),(int)iDaemmerung_mm),(int)>> iDaemmerung_ss );>> was soll eigentlich diese int casterrei?
Falls irgendjemand mal auf die Schnapsidee kommt, aus iDaemmerung_hh
einen long zu machen, stirbt nicht gleich alles den Ehrentod.