Sin mas aquí el código.
Código
#include <stdio.h>
#include <string.h>
int atonum (int numero);
main(int argc, char *argv[])
{
unsigned int a=0;
unsigned int b=0;
unsigned int c=0;
unsigned int d=0;
int cont=0;
int tri=0;
int i=0;
long int ipn;
char *s;
if(argc!=2)
{
printf("Error en la introduccion de la direccion ip\n");
return(0);
}
if (strlen(argv[1])>15) // Me fijo que el string de entrada no posea
//mas de 15 caracteres, el maximo posible 3
//puntos mas 12 numeros 15 caracteres total
{
printf ("no es una ip valida");
return (0);
}
// me fijo que todos los craracteres que componene el string sean validos
//para una direccion ip
for (i=0;i<(strlen(argv[1]));i++)
{
if (atonum(argv[1][i])==-1 )
{
printf("\t el elemento \t %d \t es \t %c ERROR ",i,argv[1][i]);
printf("\n \t este elemento es invalido para una direccion ip \n");
return(0);
}
if (atonum(argv[1][i])!=-1 )
{
printf("\t el elemento \t %d \t es \t %c ok \n ",i,argv[1][i]);
}
}
i=0;
//me fijo que la cantidad de campos sea 4
for (i=0;i<(strlen(argv[1]));i++)
{
if (atonum(argv[1][i])==46 )
{
cont++;
}
if (cont>3 )
{
printf ("\n \n \t Error en el formato de la ip \n \n \t demasiado campos \n");
return (0);
}
}
i=0;
cont=0;
// me fijo que todos los campo no posean mas de 3 numeros
for (i=0;i<(strlen(argv[1]));i++)
{
if (atonum(argv[1][i])!=46)
{
if (cont>=3)
{
printf("error en el formato de la ip uno de los campos esta exedido");
}
cont++;
}
if (atonum(argv[1][i])==46)
{
cont=0;
}
}
sscanf(argv[1],"%u.%u.%u.%u",&a,&b,&c,&d);
printf ("\n\t %u.%u.%u.%u \n",a,b,c,d);
printf ("\n\t en exadecimal %x.%x.%x.%x \n",a,b,c,d);
if (a>256 || b>256 || c>256 || d>256 )
{
printf ("\n \t Error uno de los campos es mayor a 256 \n");
return(0);
}
printf ("\n\t la direccion ip sera pasada a una variable de 32 bits ipn \n");
ipn=(a<<24)+(b<<16)+(c<<8)+d;
printf ("\n\t la direccion ip ahora esta en ipn %x \n",ipn);
}
int atonum (int numero)
{
int n;
if ( (numero-48)>=0 && (numero-48)<=9) {n=numero-48;}
if ( numero==46) {n=46;} // si el caracter es un punto se retorna el mismo valor
if ((numero-48)<0 && (numero-48)>9) {n=-1;}
return (n);
}
Espero criticas, opiniones, correcciones (que ya estoy viendo varias para hacer pero bueno).
Desde ya muchas gracias por su tiempo y colaboración.
EI: juntando mensajes.
Por cierto me olvidaba, compilado en código c en bloodshed dev c++ 3.99.











Autor


En línea
