sowas wie sprintf finde ich für Mikrocontroller Mist.
Grund: Man schleppt viel zu viel unbenutztes Zeug in den zumeist knappen
ROM hinein.
Meine Alternative, die für alles was nicht float ist wohl ausreichen
dürfte:
/***************************************************
Dezimal-Konvertierung Long in Pufferbereich.
digits = gewünschte Anzahl Stellen.
digits<0 = mit führenden Nullen,
sonst = mit führenden Leerzeichen
Buffer = Zeiger auf den Ergebnispuffer, mindestens 4 Byte groß.
BufLen = Gesamtgröße des Ergebnispuffers. Soll mindestens 3 Byte
größer
sein als digits
***************************************************/
long LONGtoString (long aValue, int digits, char* Buffer, int BufLen)
{ char* P;
char* Q;
long L;
char v;
int i, j, k;
ldiv_t T;
*Buffer = 0;
if (BufLen<4) return aValue;
i = BufLen - 1;
j = digits;
if (j<0) j = -j;
if (i < (j+3)) /* mehr Stellen als Bufferplatz */
{ Buffer[0] = '?';
Buffer[1] = 0;
return aValue;
}
Buffer[i--] = 0; /* Endemarker setzen */
if (aValue<0)
{ L = -aValue;
v = 1;
}
else { L = aValue;
v = 0;
}
if (!L) Buffer[i--] = '0';
while (i)
{ if (!L) goto _lready;
T = ldiv(L,10);
L = T.quot;
Buffer[i--] = '0'+T.rem;
}
/* i = 0, d.h. der Buffer ist voll! */
i = 0; j = BufLen - 2;
Buffer[i++] = '>';
while (i<j) Buffer[i++] = '9';
return aValue;
/* So, die Ziffern sind erzeugt, jetzt wird formatiert.
i zeigt auf freien Platz vor 1. Ziffer
*/
_lready:
k = BufLen - i - 2; /* k = Anzahl gehabter Digits */
if (digits < 0) /* mit Nullen auffüllen */
{ j = -digits; /* j = Sollstellenzahl */
if (v) k++; /* eine Stelle für '-' berücksichtigen */
while (k++ < j)
{ if (i > 0) Buffer[i--] = '0'; }
if (v) Buffer[i--]= '-'; /* Vorzeichen eintragen */
}
else /* mit Spaces auffüllen */
{ if (v)
{ Buffer[i--] = '-'; /* Vorzeichen eintragen */
k++; /* Stelle berücksichtigen */
}
j = digits;
while (k++ < j)
{ if (i > 0) Buffer[i--] = ' '; }
}
++i; /* i zeigt jetzt auf 1. Zeichen */
if (i)
{ P = Buffer;
Q = &Buffer[i];
j = BufLen - 1;
while (j--) *P++ = *Q++;
*P = 0;
}
return aValue;
}
W.S.