
<font color="#0000ff">/*</font><font color="#0000ff">-------------------------------------------------------------------------</font>
<font color="#0000ff"> integer to string conversion</font>

<font color="#0000ff"> Written by:   Bela Torok, 1999</font>
<font color="#0000ff">               bela.torok@kssg.ch</font>
<font color="#0000ff"> usage:</font>

<font color="#0000ff"> _ultoa(unsigned long value, char* string, int radix)</font>
<font color="#0000ff"> _ltoa(long value, char* string, int radix)</font>

<font color="#0000ff"> value  -&gt;  Number to be converted</font>
<font color="#0000ff"> string -&gt;  Result</font>
<font color="#0000ff"> radix  -&gt;  Base of value (e.g.: 2 for binary, 10 for decimal, 16 for hex)</font>
<font color="#0000ff">---------------------------------------------------------------------------*/</font>

<font color="#a020f0">#define NUMBER_OF_DIGITS </font><font color="#ff00ff">32</font>

<font color="#2e8b57"><b>void</b></font> _ultoa(<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>long</b></font> value, <font color="#2e8b57"><b>char</b></font>* string, <font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>char</b></font> radix)
{
<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>char</b></font> index;
<font color="#2e8b57"><b>char</b></font> buffer[NUMBER_OF_DIGITS];  <font color="#0000ff">/*</font><font color="#0000ff"> space for NUMBER_OF_DIGITS + '\0' */</font>

  index = NUMBER_OF_DIGITS;

  <font color="#804040"><b>do</b></font> {
    buffer[--index] = <font color="#ff00ff">'0'</font> + (value % radix);
    <font color="#804040"><b>if</b></font> ( buffer[index] &gt; <font color="#ff00ff">'9'</font>) buffer[index] += <font color="#ff00ff">'A'</font> - <font color="#ff00ff">'9'</font> - <font color="#ff00ff">1</font>;
    value /= radix;
  } <font color="#804040"><b>while</b></font> (value != <font color="#ff00ff">0</font>);

  <font color="#804040"><b>do</b></font> {
    *string++ = buffer[index++];
  } <font color="#804040"><b>while</b></font> ( index &lt; NUMBER_OF_DIGITS );

  *string = <font color="#ff00ff">0</font>;  <font color="#0000ff">/*</font><font color="#0000ff"> string terminator */</font>
}

<font color="#2e8b57"><b>void</b></font> _ltoa(<font color="#2e8b57"><b>long</b></font> value, <font color="#2e8b57"><b>char</b></font>* string, <font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>char</b></font> radix)
{
  <font color="#804040"><b>if</b></font> (value &lt; <font color="#ff00ff">0</font> &amp;&amp; radix == <font color="#ff00ff">10</font>) {
    *string++ = <font color="#ff00ff">'-'</font>;
    value = -value;
  }
  _ultoa(value, string, radix);
}
