0,0 → 1,76 |
/* |
FUNCTION |
<<utoa>>---unsigned integer to string |
|
INDEX |
utoa |
|
ANSI_SYNOPSIS |
#include <stdlib.h> |
char *utoa(unsigned <[value]>, char *<[str]>, int <[base]>); |
char *__utoa(unsigned <[value]>, char *<[str]>, int <[base]>); |
|
DESCRIPTION |
<<utoa>> converts the unsigned integer [<value>] to a null-terminated string |
using the specified base, which must be between 2 and 36, inclusive. |
<[str]> should be an array long enough to contain the converted |
value, which in the worst case is sizeof(int)*8+1 bytes. |
|
RETURNS |
A pointer to the string, <[str]>, or NULL if <[base]> is invalid. |
|
PORTABILITY |
<<utoa>> is non-ANSI. |
|
No supporting OS subroutine calls are required. |
*/ |
|
#include <stdlib.h> |
|
char * |
_DEFUN (__utoa, (value, str, base), |
unsigned value _AND |
char *str _AND |
int base) |
{ |
const char digits[] = "0123456789abcdefghijklmnopqrstuvwxyz"; |
int i, j; |
unsigned remainder; |
char c; |
|
/* Check base is supported. */ |
if ((base < 2) || (base > 36)) |
{ |
str[0] = '\0'; |
return NULL; |
} |
|
/* Convert to string. Digits are in reverse order. */ |
i = 0; |
do |
{ |
remainder = value % base; |
str[i++] = digits[remainder]; |
value = value / base; |
} while (value != 0); |
str[i] = '\0'; |
|
/* Reverse string. */ |
for (j = 0, i--; j < i; j++, i--) |
{ |
c = str[j]; |
str[j] = str[i]; |
str[i] = c; |
} |
|
return str; |
} |
|
char * |
_DEFUN (utoa, (value, str, base), |
unsigned value _AND |
char *str _AND |
int base) |
{ |
return __utoa (value, str, base); |
} |