From 7e0f021a9aec35fd8e6725e87e3313b101d26f5e Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Sun, 27 Jan 2008 11:37:44 +0100 Subject: Initial import (2.0.2-6) --- reference/C/CONTRIB/SNIP/ltostr.c | 57 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100755 reference/C/CONTRIB/SNIP/ltostr.c (limited to 'reference/C/CONTRIB/SNIP/ltostr.c') 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 + +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 +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; +} -- cgit v1.2.3-54-g00ecf