Vouloir convertir un entier en chaîne sans la fonction itoa

Je veux convertir int to char * en C sans utiliser la fonction itoa() .

Parce que sur mes systèmes Linux, la fonction itoa n’est pas là. J’utilise ce code que j’ai trouvé d’ ici

Je souhaite exécuter cette fonction sur des périphériques intégrés utilisant également Linux.

Donc, je cherche sans utiliser d’ itoa .

Je ne veux pas utiliser sprintf aussi parce que ses utilisations ne sont que des impressions.

Alors n’importe quel organisme, aidez-moi à résoudre ce problème.

Merci

snprintf est la fonction parfaite pour cela:

 char str[LEN]; snprintf(str, sizeof(str), "%d", num); 

Voici un extrait de code que vous pouvez utiliser. Il y a des manières plus élégantes et avancées, mais cela fait le travail.

Dans le passé, dans des projets embarqués, j’avais mesuré cette efficacité environ 1000 fois plus rapidement que sprintf (). Ce code est également conforme à MISRA-C.

 void getDecStr (uint8_t* str, uint8_t len, uint32_t val) { uint8_t i; for(i=1; i<=len; i++) { str[len-i] = (uint8_t) ((val % 10UL) + '0'); val/=10; } str[i-1] = '\0'; } 

Je trouve une implémentation de itoa de ce lien . Peut-être que cela vous aide comme cela l’a été pour moi.

 #include  #include  #if 0 char *strrev(char *str){ char c, *front, *back; if(!str || !*str) return str; for(front=str,back=str+strlen(str)-1;front < back;front++,back--){ c=*front;*front=*back;*back=c; } return str; } #endif char *itoa(int v, char *buff, int radix_base){ static char table[] = "0123456789abcdefghijklmnopqrstuvwxyz"; char *p=buff; unsigned int n = (v < 0 && radix_base == 10)? -v : (unsigned int) v; while(n>=radix_base){ *p++=table[n%radix_base]; n/=radix_base; } *p++=table[n]; if(v < 0 && radix_base == 10) *p++='-'; *p='\0'; return strrev(buff); } int main () { int i; char str[33]; printf ("Enter a number: "); scanf ("%d",&i); itoa (i,str,10); printf ("decimal: %s\n", str); itoa (i, str, 16); printf ("hexadecimal: %s\n", str); itoa (i, str, 2); printf ("binary: %s\n", str); return 0; } 

J’ai trouvé une solution à ce sujet ..

Je suis heureux et je veux ce que j’attendais.

 #include  #include  char *i_to_a(int num); int main() { char *str = i_to_a(4567); printf("%s",str); free(str); str = NULL; return 0; } int no_of_digits(int num) { int digit_count = 0; while(num > 0) { digit_count++; num /= 10; } return digit_count; } char *i_to_a(int num) { char *str; int digit_count = 0; if(num < 0) { num = -1*num; digit_count++; } digit_count += no_of_digits(num); str = malloc(sizeof(char)*(digit_count+1)); str[digit_count] = '\0'; while(num > 0) { str[digit_count-1] = num%10 + '0'; num = num/10; digit_count--; } if(digit_count == 1) str[0] = '-'; return str; }