想要将整数转换为没有itoafunction的string

我想在C中转换int to char *而不使用itoa()函数。

因为在我的Linux系统我itoafunction不存在。 我正在使用这个代码,我从这里find

我想在使用Linux的embedded式设备上运行这个function。

所以我正在寻找不使用itoa

我不想使用sprintf也因为它的用途只是打印。

所以任何机构请帮我找出这个问题。

谢谢

Solutions Collecting From Web of "想要将整数转换为没有itoafunction的string"

事情是snprintf是这个完美的功能:

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

这是一个简单的代码片段,你可以使用。 有更优雅和先进的方式,但是这完成了工作。

在过去的嵌入式项目中,我测量的效率比sprintf()高出大约1000倍。 该代码也符合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'; } 

我从这个链接找到itoa的实现。 也许它可以帮助你,就像它为我做的那样。

 #include <stdio.h> #include <string.h> #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; } 

我找到了解决方案

我很高兴,我希望我所期望的。

 #include <string.h> #include <stdlib.h> 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; }