diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2008-01-27 11:37:44 +0100 |
---|---|---|
committer | Tobias Klauser <tklauser@xenon.tklauser.home> | 2008-01-27 11:37:44 +0100 |
commit | 7e0f021a9aec35fd8e6725e87e3313b101d26f5e (patch) | |
tree | b1cacc4b24393f517aeb4610e9e1021f954307a8 /reference/C/CONTRIB/SNIP/ltostr.c |
Initial import (2.0.2-6)2.0.2-6
Diffstat (limited to 'reference/C/CONTRIB/SNIP/ltostr.c')
-rwxr-xr-x | reference/C/CONTRIB/SNIP/ltostr.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/SNIP/ltostr.c b/reference/C/CONTRIB/SNIP/ltostr.c new file mode 100755 index 0000000..583426a --- /dev/null +++ b/reference/C/CONTRIB/SNIP/ltostr.c @@ -0,0 +1,57 @@ +/*
+** LTOSTR.C -- routine and example program to convert a long int to
+** the specified numeric base, from 2 to 36.
+**
+** Written by Thad Smith III, Boulder, CO. USA 9/06/91
+** and contributed to the Public Domain.
+*/
+
+#include <stdlib.h>
+
+char * /* addr of terminating null */
+ltostr (
+ char *str, /* output string */
+ long val, /* value to be converted */
+ unsigned base) /* conversion base */
+{
+ ldiv_t r; /* result of val / base */
+
+ if (base > 36) /* no conversion if wrong base */
+ {
+ str = '\0';
+ return str;
+ }
+ if (val < 0) *str++ = '-';
+ r = ldiv (labs(val), base);
+
+ /* output digits of val/base first */
+
+ if (r.quot > 0) str = ltostr (str, r.quot, base);
+
+ /* output last digit */
+
+ *str++ = "0123456789abcdefghijklmnopqrstuvwxyz"[(int)r.rem];
+ *str = '\0';
+ return str;
+}
+
+#include <stdio.h>
+main()
+{
+ char buf[100], line[100], *tail;
+ long v;
+ int inbase, outbase;
+
+ for (;;)
+ {
+ printf ("inbase, value, outbase? ");
+ fgets (line, sizeof line, stdin);
+ sscanf (line, " %d%*[, ]%[^, ]%*[, ]%d", &inbase, buf, &outbase);
+ if (inbase == 0)
+ break; /* exit if first number 0 */
+ v = strtol (buf, &tail, inbase);
+ ltostr (buf, v, outbase);
+ printf ("=%ld (10) = %s (%d).\n", v, buf, outbase);
+ };
+ return 0;
+}
|