TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: tithanae en 11 de Febrero de 2009, 14:01:04

Título: como insertar ceros a la izquierda en un vector
Publicado por: tithanae en 11 de Febrero de 2009, 14:01:04
lo que sucede es que me conecto con un servidor el cual segun su protocolo me dice que le tengo que enviar la IP de mi Modem en este formato XXX.XXX.XXX.XXX  pero el modem me da  la ip de esta forma 172.26.174.56 y tengo que enviarla  asi 172.026.174.056 facil no ? pero que soy un bruto que llevo 36 horas sin dormir y no lo logro hacer debo ser muy idiota o estoy cansado porfa  HELP me!!
Título: Re: como insertar ceros a la izquierda en un vector
Publicado por: migsantiago en 11 de Febrero de 2009, 14:17:17
Dinos qué tipo de variables son las que almacenan el valor 172.26.174.56 y qué tipo de variables almacenarán el valor con ceros.
Título: Re: como insertar ceros a la izquierda en un vector
Publicado por: tithanae en 11 de Febrero de 2009, 14:32:08
las recivo en unvector inicializado asi:
Código: [Seleccionar]
int8 iplocal[16];asi sercibo los datos :
Código: [Seleccionar]
do
                     {
                        iplocal[varContadorEnBucleDo]=fgetc(COM_MODEM);     
                        varContadorEnBucleDo++;
                     } while(iplocal[varContadorEnBucleDo-1]!=0x0d);
                     varSalirBucleDo=true;
los caracteres recibidos son ascii
Título: Re: como insertar ceros a la izquierda en un vector
Publicado por: geronimoo en 11 de Febrero de 2009, 17:13:59
Hola tithanae.
Aqui te mando una funcion que acabo de escribir en C.
Deberia ser facilmente portable a CCS, ya que me guie de su documentacion para hacerla.
No te la porto yo pq ando corto de tiempo.
No se si ccs admite punteros a char, creo que si, pero si no, se soluciona con variables globales  :-)

Código: C
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. void get_full_ip(char ip[],char fullip[]) {
  6.     char term[2], *ptr, octet[5];
  7.     int i=0,k=0,tam=0;
  8.     strcpy(fullip,"000.000.000.000");
  9.     strcpy(term,".");
  10.     ptr = strtok(ip, term);
  11.     while (ptr!=0) {
  12.         sprintf(octet,"%03s.",ptr);
  13.         tam=strlen(octet);
  14.         for(i=0;i<tam;i++){
  15.             fullip[k++]=octet[i];
  16.         }
  17.         ptr = strtok(0, term);
  18.     }
  19.     fullip[15]='\0';
  20. }
  21.  
  22. int main() {
  23.     char ip[16]="192.168.1.14";
  24.     char ipfix[16];
  25.     get_full_ip(ip,ipfix);
  26.     printf("IPFIX:%s\n",ipfix);
  27.     return 0;
  28. }

Espero te sirva.
Saludos!
Título: Re: como insertar ceros a la izquierda en un vector
Publicado por: migsantiago en 11 de Febrero de 2009, 20:07:56
El punto en valor ASCII es 0x2E. Entonces puedes separar los 4 números de la IP y volverla a armar ya con ceros. Considerando que el compilador es CCS:

Código: [Seleccionar]
int numero[4];
char cadena[4];
int punto=0;
int i,j,k;

i=0; j=0; k=0; punto=0;
while(punto!=1)
{
cadena[i]=iplocal[j++];
   if(cadena[i]==0x2E) //punto
   {
   cadena[i]=0x00;
   numero[k++]=atoi(cadena);
   i=0;
   }
   if(cadena[i]==0x0D) //retorno de carro
   {
   punto=1; //termina while
   }
   i++;
}

//En iplocal ya estará la ip con todo y ceros
sprintf(iplocal,"%03u.%03u.%03u.%03u",numero[0],numero[1],numero[2],numero[3]);
Título: Re: como insertar ceros a la izquierda en un vector
Publicado por: tithanae en 12 de Febrero de 2009, 12:37:43
ok pruebo y les aviso grax :-/