Implémentation similaire à Ahmad Sirojuddin mais avec une sémantique légèrement différente. D'un point de vue sécurité, chaque fois qu'une fonction écrit dans un tampon de chaîne, la fonction devrait vraiment "savoir" la taille du tampon et refuser d'écrire au-delà de sa fin. Je suppose que c'est en partie la raison pour laquelle vous ne pouvez plus trouver itoa.
De plus, l'implémentation suivante évite d'effectuer l'opération de module/division deux fois.
char *u32todec( uint32_t value,
char *buf,
int size)
{
if(size > 1){
int i=size-1, offset, bytes;
buf[i--]='\0';
do{
buf[i--]=(value % 10)+'0';
value = value/10;
}while((value > 0) && (i>=0));
offset=i+1;
if(offset > 0){
bytes=size-i-1;
for(i=0;i
`Le code suivant teste à la fois le code ci-dessus et démontre sa validité :
int main(void)
{
uint64_t acc;
uint32_t inc;
char buf[16];
size_t bufsize;
for(acc=0, inc=7; acc<0x100000000; acc+=inc){
printf("%u: ", (uint32_t)acc);
for(bufsize=17; bufsize>0; bufsize/=2){
if(NULL != u32todec((uint32_t)acc, buf, bufsize))
printf("%s ", buf);
}
printf("\n");
if(acc/inc > 9)
inc*=7;
}
return 0;
}`