1 /* Copyright (c) 2014 Corinna Vinschen <corinna@vinschen.de> */
2 /*
3 FUNCTION
4 <<itoa>>---integer to string
5
6 INDEX
7 itoa
8
9 SYNOPSIS
10 #include <stdlib.h>
11 char *itoa(int <[value]>, char *<[str]>, int <[base]>);
12 char *__itoa(int <[value]>, char *<[str]>, int <[base]>);
13
14 DESCRIPTION
15 <<itoa>> converts the integer <[value]> to a null-terminated string
16 using the specified base, which must be between 2 and 36, inclusive.
17 If <[base]> is 10, <[value]> is treated as signed and the string will be
18 prefixed with '-' if negative. For all other bases, <[value]> is treated as
19 unsigned. <[str]> should be an array long enough to contain the converted
20 value, which in the worst case is sizeof(int)*8+1 bytes.
21
22 RETURNS
23 A pointer to the string, <[str]>, or NULL if <[base]> is invalid.
24
25 PORTABILITY
26 <<itoa>> is non-ANSI.
27
28 No supporting OS subroutine calls are required.
29 */
30
31 #include <stdlib.h>
32
33 char *
__itoa(int value,char * str,int base)34 __itoa (int value,
35 char *str,
36 int base)
37 {
38 unsigned uvalue;
39 int i = 0;
40
41 /* Check base is supported. */
42 if ((base < 2) || (base > 36))
43 {
44 str[0] = '\0';
45 return NULL;
46 }
47
48 /* Negative numbers are only supported for decimal.
49 * Cast to unsigned to avoid overflow for maximum negative value. */
50 if ((base == 10) && (value < 0))
51 {
52 str[i++] = '-';
53 uvalue = (unsigned)-value;
54 }
55 else
56 uvalue = (unsigned)value;
57
58 __utoa (uvalue, &str[i], base);
59 return str;
60 }
61
62 char *
itoa(int value,char * str,int base)63 itoa (int value,
64 char *str,
65 int base)
66 {
67 return __itoa (value, str, base);
68 }
69