This question already has answers here: How to convert an int to string in C? (11 answers) Closed 9 years ago.
I tried this example:
/* itoa example */
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i;
char buffer [33];
printf ("Enter a number: ");
scanf ("%d",&i);
itoa (i,buffer,10);
printf ("decimal: %s\n",buffer);
itoa (i,buffer,16);
printf ("hexadecimal: %s\n",buffer);
itoa (i,buffer,2);
printf ("binary: %s\n",buffer);
return 0;
}
but the example there doesn't work (it says the function itoa
doesn't exist).
Use sprintf()
:
int someInt = 368;
char str[12];
sprintf(str, "%d", someInt);
All numbers that are representable by int
will fit in a 12-char-array without overflow, unless your compiler is somehow using more than 32-bits for int
. When using numbers with greater bitsize, e.g. long
with most 64-bit compilers, you need to increase the array size—at least 21 characters for 64-bit types.
Making your own itoa
is also easy, try this :
char* itoa(int i, char b[]){
char const digit[] = "0123456789";
char* p = b;
if(i<0){
*p++ = '-';
i *= -1;
}
int shifter = i;
do{ //Move to where representation ends
++p;
shifter = shifter/10;
}while(shifter);
*p = '\0';
do{ //Move back, inserting digits as u go
*--p = digit[i%10];
i = i/10;
}while(i);
return b;
}
or use the standard sprintf()
function.
i = INT_MIN
because of the i *= -1
line.
while
tests the condition before the loop start, do while
tests the condition after the loop has started.
That's because itoa
isn't a standard function. Try snprintf
instead.
char str[LEN];
snprintf(str, LEN, "%d", 42);
(CHAR_BIT * sizeof(int) - 1) / 3 + 2
, as caf mentioned.
- 1
for snprintf.
Success story sharing
sprintf
is discussed here in more detail: stackoverflow.com/questions/8232634/simple-use-of-sprintf-cstr
is going to be. (eg multi-byte characters, numbers that represent counters without a limit, etc).