d2q.c
by Dave Aronson
/* decimal to dotted quad converter */
/* COPYRIGHT 1998, David J. Aronson */
/* License freely granted for all spamfighting use */
/* All other rights reserved */
#include <stdio.h>
#include <stdlib.h>
unsigned long atoul (char *s);
void main (int argc, char *argv[])
{
int argNum;
unsigned long l;
int quadNum;
/* for each arg */
for (argNum = 1; argNum < argc; argNum++)
{
unsigned long mask = 0xFF000000;
int shift = 0;
/* convert string to number */
l = atoul (argv[argNum]);
/* print original string */
printf ("%s = ", argv[argNum]);
/* for each quad */
for (quadNum = 0; quadNum < 4; quadNum++)
{
/* if this isn't the first one, separate from previous */
if (quadNum) printf (".");
/* mask out OTHER quads, and shift as needed to get 0-255 */
printf ("%ld", (l & (mask >> shift)) >> (24 - shift));
/* shift over to next quad */
shift += 8;
/* end for each quad */
}
printf ("\n");
/* end for each arg */
}
/* end main() */
}
/* convert string to UNSIGNED long; atol is SIGNED, dagnabit! */
unsigned long atoul (char *string)
{
char* charPtr;
unsigned long l = 0;
/* for each char in string */
for (charPtr = string; *charPtr; charPtr++)
{
/* multiply total-so-far by ten and add digit */
l = l * 10 + (*charPtr - '0');
}
return l;
}