Eccomi, l'ho provata e va alla perfezione, produce eccezzione in caso in cui il valore da valutare sia negativo (d'altra parte deve essere unsigned) e in caso di overflow se eccede il valore massimo del tipo unsigned __int32 che è 4,294,967,295.
codice:
short UInt32ToStr(unsigned int i, char **const p, short lmax)
{
short n = 0;
*p += (lmax - 1);
**p = '\0';
do
{
*(--(*p)) = '0' + (i % 10);
n++;
}
while ( (i /= 10) != 0);
return n;
}
Alla chiamata:
codice:
#define UI32STR_ROOM 11 // 10 cifre + il teminatore della stringa.
//...
short nChars = 0;
unsigned int iVal = 1895417692;
char str[UI32STR_ROOM];
char *pStr = str;
nChars = UInt32ToStr(iVal, &pStr, UI32STR_ROOM);
Ho fatto qualche piccola modifica ma entrambe le versioni (questa e quella postata da ESSE-EFFE) hanno lo stesso identico comportamento. Ringrazio tutti ed in particolare oregon che coglie sempre nel segno e ESSE-EFFE che mi ha suggerito una elegante soluzione.