Autor Tema: como insertar ceros a la izquierda en un vector  (Leído 2009 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado tithanae

  • PIC16
  • ***
  • Mensajes: 109
como insertar ceros a la izquierda en un vector
« 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!!
« Última modificación: 11 de Febrero de 2009, 14:03:12 por tithanae »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: como insertar ceros a la izquierda en un vector
« Respuesta #1 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.
« Última modificación: 11 de Febrero de 2009, 14:26:39 por migsantiago »

Desconectado tithanae

  • PIC16
  • ***
  • Mensajes: 109
Re: como insertar ceros a la izquierda en un vector
« Respuesta #2 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

Desconectado geronimoo

  • PIC10
  • *
  • Mensajes: 34
    • Divide & Conquer
Re: como insertar ceros a la izquierda en un vector
« Respuesta #3 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!
.::GERO::.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: como insertar ceros a la izquierda en un vector
« Respuesta #4 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]);

Desconectado tithanae

  • PIC16
  • ***
  • Mensajes: 109
Re: como insertar ceros a la izquierda en un vector
« Respuesta #5 en: 12 de Febrero de 2009, 12:37:43 »
ok pruebo y les aviso grax :-/