conv.c -- simple numeric base converter
David Koblas
koblas at mips.COM
Mon Jul 9 06:27:15 AEST 1990
Yet another base converter, but written as a replacement for atof.
Called as:
val = atov("0x123", 0);
val = atov("abz", 36);
Where the second argument is the default base, if == 0 then use
default conventions: 0x = 16, 0 = 8, 0% = binary, else base 10.
-----CUT---HERE----------------------------------------------------------
/* +------------------------------------------------------------------+ */
/* | Copyright 1989, David Koblas. | */
/* | You may copy this file in whole or in part as long as you | */
/* | don't try to make money off it, or pretend that you wrote it. | */
/* +------------------------------------------------------------------+ */
#include <ctype.h>
#ifdef TEST
main(argc,argv)
int argc;
char **argv;
{
int i;
for (i=1;i<argc;i++)
printf("%10s == %d\n",argv[i],atov(argv[i],0));
}
#endif
atov(str,type)
char *str;
int type;
{
int sign = 1;
int i;
char c;
int val=0,n;
i=0;
while ((str[i]==' ') || (str[i]=='\t')) i++;
if (str[i]=='-') {
sign = -1;
i++;
} else if (str[i]=='+') {
sign = 1;
i++;
}
if (type==0) {
if (str[i]=='0') {
i++;
if (str[i]=='%') {
i++;
type=2;
} else if (str[i]=='x') {
i++;
type=16;
} else {
type=8;
}
} else {
type=10;
}
}
for (;i<strlen(str);i++) {
c=str[i];
if (isdigit(c)) {
n = c - '0';
} else if (isupper(c)) {
n = c - 'A' + 10;
} else if (islower(c)) {
n = c - 'a' + 10;
} else {
goto out;
}
if (n>=type)
goto out;
val = (val*type)+n;
}
out:
return(val * sign);
}
--
name : David Koblas domain: koblas at cs.uoregon.edu
place: Nowhere, I'm just an AI batch job. domain: koblas at mips.com
quote: "Time has little to do with domain: koblas at riacs.edu
infinity and jelly donuts." domain: koblas at stellar.arc.nasa.gov
More information about the Alt.sources
mailing list