C long2a

来源:互联网 发布:python编写界面 编辑:程序博客网 时间:2024/06/03 22:36
/*
**  LTOA.C
**
**  Converts a long integer to a string.
**
**  Copyright 1988-90 by Robert B. Stout dba MicroFirm
**
**  Released to public domain, 1991
**
**  Parameters: 1 - number to be converted
**              2 - buffer in which to build the converted string
**              3 - number base to use for conversion
**
**  Returns:  A character pointer to the converted string if
**            successful, a NULL pointer if the number base specified
**            is out of range.
*/

#include <stdlib.h>
#include <string.h>

#define BUFSIZE (sizeof(long) * 8 + 1)

char *ltoa(long N, char *str, int base)
{
      register int i = 2;
      long uarg;
      char *tail, *head = str, buf[BUFSIZE];

      if (36 < base || 2 > base)
      base = 10;                    /* can only use 0-9, A-Z        */
      tail = &buf[BUFSIZE - 1];           /* last character position      */
      *tail-- = '\0';

     if (10 == base && N < 0L)
     {
          *head++ = '-';
          uarg    = -N;
     }
     else  uarg = N;

     if (uarg)
    {
         for (i = 1; uarg; ++i)
        {                                                                              register ldiv_t r;
              r       = ldiv(uarg, base);
          *tail-- = (char)(r.rem + ((9L < r.rem) ? ('A' - 10L) : '0'));
          uarg    = r.quot;
     }
   }
   else  *tail-- = '0';
   memcpy(head, ++tail, i);
   return str;
}
int main()
{
    unsigned long ul = 9234567890123456789;
    
    char * c1 = malloc(20);
    sprintf(c1,"%u",ul);
    
    char * b = malloc(20);
    b = ltoa(ul,b,10);

    printf("%u\r\n",ul);
    printf("%s\r\n",c1);
    printf("%s",b);
    return 0;
}


原创粉丝点击