我想在不使用itoa()函数的情况下在C中转换int to char*。
因为在我的Linux系统上,我没有itoa函数。我使用的是我在here中找到的代码
我也想在使用Linux的嵌入式设备上运行这个功能。
所以我正在寻找不使用itoa的。
我也不想使用sprintf,因为它只用于打印。
所以任何人都可以帮我解决这个问题。
谢谢
发布于 2012-04-04 00:51:45
我找到了解决这个问题的办法..
我很高兴,我想要我所期望的。
#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;
}发布于 2012-04-03 21:57:15
事情是这样的,snprintf是一个完美的函数:
char str[LEN];
snprintf(str, sizeof(str), "%d", num);发布于 2012-04-04 21:14:59
下面是一个您可以使用的简单代码片段。有更优雅和更高级的方法,但这可以完成工作。
在过去的嵌入式项目中,我测量过它的效率大约是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';
}https://stackoverflow.com/questions/9994742
复制相似问题