Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


Ayuda con el codigo pleasee

Trucos y Consejos con respecto al Lenguaje C++ Builder.

Moderador: yalmar

Ayuda con el codigo pleasee

Notapor Ziara el Lun Dic 03, 2007 7:56 am

Hola por si alguien me puede echar una mano.. tengo dudas con un código que aparece abajo:

/* convert a numeric IP address to a string */
#define IPTOSBUFFERS 12
char *iptos(u_long in)
{
static char output[IPTOSBUFFERS][3*4+3+1];
static short which;
u_char *p;

p = (u_char *)∈
which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);
sprintf(output[which], "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
return output[which];
}

NO ENTIENDO muy bien el funcionamiento de cómo convierte un número IP a un string para que aparezca en pantalla.

la funcíon es llamada desde :

printf("\tAddress: %s\n",
iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr));

donde (((struct sockaddr_in *)a->addr)->sin_addr.s_addr)) apunta a una dirección IP y lo que supuestamente hace iptos es convertirlo en un string

me gustaría trasladar dicha función al Builder c++ y en vez usar printf, usar ShowMessage, pero no he tenido éxito.

Alguien tiene alguna idea?? gracias y un saludo
Ziara
Novato
Novato
 
Mensajes: 10
Registrado: Lun Dic 03, 2007 7:27 am

Re: Ayuda con el codigo pleasee

Notapor ivancp el Jue Ene 17, 2008 10:14 pm

Comentando el codigo

Código: Seleccionar todo
//Esta linea indica el maximo de numeros de ip que puede almacenar en la variable, output
// ya que esta es static.
// short which es la variable que va contando en que buffer se ecuentra.

#define IPTOSBUFFERS 12   

char *iptos(u_long in)
{
static char output[IPTOSBUFFERS][3*4+3+1]; 
//refiere a los caracteres 255 por 4 + 3 puntos y 1 extra por si acaso.

static short which;  //Inicialmente es 0

//convirtiendo el parametro long in, en cadena.
u_char *p;
p = (u_char *)∈
//Incrementando el buffer actual,
//si es masde 12, entonces vuelve a iniciar con el 0

which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);   

Obtiene cada cada caracter de la variable p y lo pasa con formato entero (%d) al buffer actual (output)

sprintf(output[which], "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);

//retorna el indice actual (which) del array de cadenas (output)
return output[which];
}
ivancp
Programador Experimentado
Programador Experimentado
 
Mensajes: 350
Registrado: Jue Sep 06, 2007 12:57 pm


Volver a C++ Builder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados