Created
April 25, 2014 22:29
-
-
Save boatilus/11305304 to your computer and use it in GitHub Desktop.
Public domain ltoa implementation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
** 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; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment