我想在C中转换int to char
*,而不使用itoa()
函数。
因为在我的Linux系统上我没有itoa
功能。我使用的是从here
我想在使用Linux的嵌入式设备上运行此功能。
所以我在寻找不使用itoa
。
我也想使用sprintf
,因为它仅用于打印。
所以任何人都可以帮我弄清楚这个问题。
由于
答案 0 :(得分:7)
事情snprintf
是完美的功能:
char str[LEN];
snprintf(str, sizeof(str), "%d", num);
答案 1 :(得分:4)
以下是您可以使用的简单代码段。有更多优雅和先进的方法,但这可以完成工作。
在过去的嵌入式项目中,我测得它的效率比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';
}
答案 2 :(得分:3)
我从link找到了itoa的实现。也许这对我有帮助。
答案 3 :(得分:3)
#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;
}
答案 4 :(得分:-1)
我找到了关于此的解决方案..
我很高兴并且我想要我想要的。
#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;
}