"0" in vorschieben wenn nur einstellig.

OP #3795690
Lesenswert?

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
9
    mail_length1 = strnlen(conv_buffer,CONVERSION_BUFFER_LEN);
10
    memmove(&mail_buffer[z],conv_buffer,mail_length1);
11
    z += mail_length1;  
12
    
13

14
    //mail_length1 = strnlen(":",CONVERSION_BUFFER_LEN);
15
    //memmove(&mail_buffer[z],":",mail_length1);
16
    //z += mail_length1;  
17
    
18
    strcpy_P(&mail_buffer[z], PSTR(":")); //copy mail text
19
     z += 1;  
20
    mail_length1 = 0;
21
    
22
    itoa (iDaemmerung_mm,conv_buffer,10);      //convert temp value
23
    mail_length1 = strnlen(conv_buffer,CONVERSION_BUFFER_LEN);
24
    memmove(&mail_buffer[z],conv_buffer,mail_length1);
25
    z += mail_length1;  
26
    
27
    strcpy_P(&mail_buffer[z], PSTR(":")); //copy mail text
28
     z += 1;
29
    mail_length1 = 0;
30
    
31
    itoa (iDaemmerung_ss,conv_buffer,10);      //convert temp value
32
    mail_length1 = strnlen(conv_buffer,CONVERSION_BUFFER_LEN);
33
    memmove(&mail_buffer[z],conv_buffer,mail_length1);
34
    z += mail_length1;
#3795760
Lesenswert?

Sorry, aber das Ganze sieht ein wenig aus nach "wie mache ich es 
möglichst umständlich".

1
mail_buffer[z++] = iDaemmerung_hh / 10 + '0';
2
mail_buffer[z++] = iDaemmerung_hh % 10 + '0';
3
mail_buffer[z++] = ':';
4
mail_buffer[z++] = iDaemmerung_mm / 10 + '0';
5
mail_buffer[z++] = iDaemmerung_mm % 10 + '0';
6
mail_buffer[z++] = ':';
7
mail_buffer[z++] = iDaemmerung_ss / 10 + '0';
8
mail_buffer[z++] = iDaemmerung_ss % 10 + '0';
Gast #3795766
Lesenswert?

>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));
Gast #3795772
Lesenswert?

>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));
#3796057
Lesenswert?

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
1
  sprintf_P( &mail_buffer[z], PSTR("\r\n\r\nDämmerung: %02i:%02i:%02i"),
2
             (int)iDaemmerung_hh),(int)iDaemmerung_mm),(int)iDaemmerung_ss );

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
1
                    memcpy(&eth_buffer[TCP_DATA_START_VAR],mail_auth_str,strlen(mail_auth_str)+1);
2
                    memcpy_P(&eth_buffer[TCP_DATA_START_VAR+strlen(mail_auth_str)],PSTR("\r\n"),2);
ist einfach nur grober Unfug.
Gast #3796597
Lesenswert?

> 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).
[...]

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