Autor Tema: Pregunta de novato: "Pasar de un array a una variable"  (Leído 6720 veces)

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

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #15 en: 07 de Septiembre de 2011, 19:51:10 »
  ¿Qué compilador estás usando? Yo en HiTech usé la función strcmp() para comparar dos strings.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #16 en: 07 de Septiembre de 2011, 19:52:41 »
uso C18. En el help de microchip dice:

signed char memcmp(
const void * buf1,
const void * buf2,
size_t memsize );

He querido declarar const void *LeerBuffer[64] pero sale error.
« Última modificación: 07 de Septiembre de 2011, 19:55:38 por jorgejg »

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #17 en: 08 de Septiembre de 2011, 14:01:15 »
tienes varias opciones, desde punteros, hasta uniones. Por la facilidad te recomiendo las uniones, te pongo un ejemplo:


union {
   int dato16;
   char dato8[2];
} nombre;

ahora, si pones:

nombre.dato16=0xAAEE;

se guarda en la misma situacion de memoria que ambos char dato8, es decir dato8[0] y [1] contendra:
dato8[0]=EE;
dato8[1]=AA;

mirate las uniones, son muy utiles para estos casos, ademas hay mil formas de convinarlas.

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #18 en: 08 de Septiembre de 2011, 14:47:06 »
Pero eso es para 2 caracteres, y en realidad yo necesito comparar 2 cadenas, la primera cadena me llega con longitud variable que en el peor caso me llegan 64 caracteres, pero pueden llegar a veces 5 caracteres como a veces llegan 13 o 52 caracteres, y cuando llega la cadena necesito analizar la cadena recibida, e ir analizando, por ejemplo la cabecera es fija y de 5 caracteres por ejemplo "FORMA" entonces tengo que comparar los primeros 5 caracteres de la cadena 1 con la cadena 2 = "FORMA" y si eso es verdad paso ahora a analizar la cadena formada por los bytes 6 y 7 que contienen el opcode y lo comparo con la cadena 2 = "10" y si es verdad tomo una acción, sino, lo comparo con cadena 2 = "11" y si es verdad tomo otra acción.

Al parecer no esta permitido hacer: cadena2="FORMA", pero creo que si esta permitido hacer: cadena2[5]="FORMA" lo cual tengo entendido se le llama array, esta ultima expresión lo veo mejor porque se ve mas simple pero como lo defino?
char cadena2[5]="FORMA" ? o int, short long? y como comparo? pensaba usar algo como:

flag_compara = memcmp(cadena1,cadena2,5);//comparo los 5 primeros caracteres de cadena1 con los 5 primeros caracteres de cadena2.

pero no me funciona.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #19 en: 08 de Septiembre de 2011, 14:55:36 »
no no, eso es para los caracteres que quieras, en vez de [2] pones [64] si es tu maximo.

De todas formas, segun veo lo que vas es recibiendo caracteres, pues muy facil.

char buf[64]; //aki vas guardando los caracteres ke recibes


if(!strcmp(&buf,"COMPARAR")) {
   lacadenaesigual;
}

el strcmp lo tienes en string.h, este devuelve 0 si la cadena es identica (hasta llegar a un 0), tambien puedes usar strncmp que es igual solo que en el 3er parametros debes especificar el NUMERO DE CARACTERES A COMPARAR.
« Última modificación: 08 de Septiembre de 2011, 15:03:48 por MerLiNz »

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #20 en: 08 de Septiembre de 2011, 18:09:53 »
A ver, tengo declarado #include <string.h> al inicio del programa, luego:

char LeerBuffer[64];
despues mas adelante hago:

if(strcmp(&LeerBuffer,"AVG30")==0)
{LATBbits.LATB5=1;}
else
{LATBbits.LATB5=0;}

y me sale el error:
...\main.c:221: Warning [2054] suspicious pointer conversion
...\main.c:221: Warning [2066] type qualifier mismatch in assignment

voy probando miles de formas y me salen errores similares de compilación. Voy a probar con un for a ver si por ahi lo hago.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #21 en: 08 de Septiembre de 2011, 18:17:45 »
no es un error, es un warning, utilizas C18 o CSS?

En C18 puede que no te funcione porque este mete las strings constantes como rom y no ram, para solucionarlo hazlo asi:

ram char avg[]="AVG30"; y haces strcmp(&LeerBuffer,&avg);

si usas CSS creo que no tendrias problemas, pero pruebalo antes de nada.

Aun asi, no te olvides de que puedes usar el strNcmp por si leerbuffer pone algo mas de AVG30, por ejemplo AVG30XAS, asi solo comparas las 5 primeras letras, se quedaria en strncmp(&LerrBuffer,&avg,5);
« Última modificación: 08 de Septiembre de 2011, 18:20:22 por MerLiNz »

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #22 en: 08 de Septiembre de 2011, 18:50:50 »
Por fin funcionó gracias Merlinz, lo hize en estas dos formas:

ram char cadena_ok[]="caja";
int flag_compara;

forma1:
if(strncmp(LeerBuffer,cadena_ok,2)==0)//solo espero la cadena "ca"
   {LATBbits.LATB5=1;}
   else
   {LATBbits.LATB5=0;}

forma2:
flag_compara=strncmp(LeerBuffer,cadena_ok,4);//espero la cadena "caja"
if(flag_compara==0)//bien
   {LATBbits.LATB5=1;}
   else
   {LATBbits.LATB5=0;}

gracias, disculpen si vuelvo a molestar hasta que me acostumbre al c.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #23 en: 08 de Septiembre de 2011, 19:27:16 »
Puedes revisar en hlpC18Lib ubicado en C:\MCC18\doc.

En C18 para comparar un string en RAM con un string en Memoria de Programa tienes:

Código: C
  1. if(strcmppgm2ram(&Buffer[0],"Hola")==0){
  2.  
  3. }

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #24 en: 09 de Septiembre de 2011, 14:26:52 »
Puedes revisar en hlpC18Lib ubicado en C:\MCC18\doc.

En C18 para comparar un string en RAM con un string en Memoria de Programa tienes:

Código: C
  1. if(strcmppgm2ram(&Buffer[0],"Hola")==0){
  2.  
  3. }

Saludos!

esa funcion desconocia que existiese xD pero si, es mejor asi no ocupas ram

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #25 en: 09 de Septiembre de 2011, 17:51:57 »
Probe esa función pero me salió error, uhm bueno igual digamos de la forma anterior si compila, pero ahora tengo el inconveniente para enviar un arreglo de caracteres con putUSBUSART(cadena_ok,3), es decir envio a la pc los caracateres que recibo de la pc (eco) pero no funciona bien, despues de enviarle muchas cadenas recien responde y encima mal. Cree un hilo para esto, disculpen si hablo de eso en este hilo.


 

anything