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; }