Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6536 serge 1
/*
2
FUNCTION
3
<>---unsigned integer to string
4
 
5
INDEX
6
	utoa
7
 
8
ANSI_SYNOPSIS
9
	#include 
10
	char *utoa(unsigned <[value]>, char *<[str]>, int <[base]>);
11
	char *__utoa(unsigned <[value]>, char *<[str]>, int <[base]>);
12
 
13
DESCRIPTION
14
<> converts the unsigned integer [] to a null-terminated string
15
using the specified base, which must be between 2 and 36, inclusive.
16
<[str]> should be an array long enough to contain the converted
17
value, which in the worst case is sizeof(int)*8+1 bytes.
18
 
19
RETURNS
20
A pointer to the string, <[str]>, or NULL if <[base]> is invalid.
21
 
22
PORTABILITY
23
<> is non-ANSI.
24
 
25
No supporting OS subroutine calls are required.
26
*/
27
 
28
#include 
29
 
30
char *
31
_DEFUN (__utoa, (value, str, base),
32
        unsigned value _AND
33
        char *str _AND
34
        int base)
35
{
36
  const char digits[] = "0123456789abcdefghijklmnopqrstuvwxyz";
37
  int i, j;
38
  unsigned remainder;
39
  char c;
40
 
41
  /* Check base is supported. */
42
  if ((base < 2) || (base > 36))
43
    {
44
      str[0] = '\0';
45
      return NULL;
46
    }
47
 
48
  /* Convert to string. Digits are in reverse order.  */
49
  i = 0;
50
  do
51
    {
52
      remainder = value % base;
53
      str[i++] = digits[remainder];
54
      value = value / base;
55
    } while (value != 0);
56
  str[i] = '\0';
57
 
58
  /* Reverse string.  */
59
  for (j = 0, i--; j < i; j++, i--)
60
    {
61
      c = str[j];
62
      str[j] = str[i];
63
      str[i] = c;
64
    }
65
 
66
  return str;
67
}
68
 
69
char *
70
_DEFUN (utoa, (value, str, base),
71
        unsigned value _AND
72
        char *str _AND
73
        int base)
74
{
75
  return __utoa (value, str, base);
76
}