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

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

Desconectado Jummi

  • PIC10
  • *
  • Mensajes: 21
Pregunta de novato: "Pasar de un array a una variable"
« en: 24 de Noviembre de 2010, 21:00:42 »
Vamos a ver que me estoy liando con un programita que intento hacer.
Yo recibo los datos del puerto serie y los guardo en un array. Por ejemplo tendria e array datos con dos posiciones. En Dato[0] = "F" y Dato[1]="1".
Bien quiero pasar eses dos datos del array a una variable te tendria el valor "f1".

Alguien me podria decir la forma mas facil de hacer esto?
Estube intentandolo con srtcat y strcpy y no consegui que funcionara.

Si alguien me puede pegar un ejemplo lo agradeceria.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #1 en: 24 de Noviembre de 2010, 21:18:38 »
Convendría que hagas lo siguiente:

Código: C
  1. #INCLUDE <stdlib.h>
  2.  
  3.  
  4.  
  5. char Data[3];
  6. char Value;
  7.  
  8. Data[0]='F';Data[1]='1';Data[2]='\0';
  9. Value=atoi(Data);


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

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #2 en: 24 de Noviembre de 2010, 21:19:44 »
Hola la función que realiza eso es atoi, pero primero debes tratar a tu array en un string C, es decir Array[2] = 0;

Saludos !

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #3 en: 24 de Noviembre de 2010, 21:20:29 »
jejeje vos Suky sos el gran hermano de TodoPic estas en todas !

Saludos !

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #4 en: 24 de Noviembre de 2010, 21:24:08 »
jejeje vos Suky sos el gran hermano de TodoPic estas en todas !

Saludos !
:D :D


Saludos!  ;-)

PD: Odio ese programa  :mrgreen:
No contesto mensajes privados, las consultas en el foro

Desconectado Jummi

  • PIC10
  • *
  • Mensajes: 21
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #5 en: 25 de Noviembre de 2010, 05:15:42 »
Agradecido a todos por la ayuda.

Desconectado Jummi

  • PIC10
  • *
  • Mensajes: 21
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #6 en: 25 de Noviembre de 2010, 07:58:22 »
Continuo chocando con el codigo. Os pego lo que intento hacer :
do{
  
  if(!control){  //llego un byte al puerto serie
    for(conta2 = 0; conta2 < LongBuffer; conta2++){
       printf("Buffer[%d]:  %c  ",conta2,Buffer[conta2]);
      
    }      
      DatoRecibido=atoi(Buffer);
      printf("\n\rResultado:  %s\n\r\0",DatoRecibido);
      control=1;
  }  

   } while (TRUE);

Bien, aqui cuando me llegan los datos del buffer los trato con atoi como me indicais. El ultimo caracter del buffer debia ser el \0. Luego reenvio la trama con prinftf mediante %s que debia enviarme la variable completa que estaba en el array Buffer. Os envio una captura de pantalla del terminal virtual del proteus y la variable Datorecibido esta vacia, verificada parando el programa y mirando esas posiciones de memoria.

El F1 que esta al principio es el dato que mando desde el terminal virtual hacia el pic.

¿ Que estoy haciendo mal ?

Agradeciendoles de nuevo su ayuda.

Desconectado bmfranky

  • PIC16
  • ***
  • Mensajes: 165
    • La Tienda De Fran
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #7 en: 25 de Noviembre de 2010, 09:51:18 »
Hola Jummi, cuando conviertes a int, ya no es una cadena, erraste el indicador de tipo en el printf,mira;
Citar
do{
 
  if(!control){  //llego un byte al puerto serie
    for(conta2 = 0; conta2 < LongBuffer; conta2++){
       printf("Buffer[%d]:  %c  ",conta2,Buffer[conta2]);
     
    }     
      DatoRecibido=atoi(Buffer);
      printf("\n\rResultado:  %X\n\r\0",DatoRecibido);// pusiste %s , que es strin has de poner %X, en exadecimal mayúsculas o %x en minúsculas.
      control=1;
  } 

   } while (TRUE);

Prueba y me comentas como te fue.
Visiten La Tienda De Fran ;-) Aqui. y mi nueva Web Aqui.

Desconectado Jummi

  • PIC10
  • *
  • Mensajes: 21
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #8 en: 25 de Noviembre de 2010, 10:11:15 »
Tienes razon bmfranky, pero lo que hace atoi entonces no es lo que yo buscaba.

El tema es que yo tengo los datos recibidos en un array como ya esplique y quiero tratarlos todos juntos, es decir, si tengo en Buffer[0]="F" y Buffer[1]="1", yo quiero meter esas dos casillas en una sola variable que tendria el contenido "F1". Vamos que lo que quiero es concatenar el contenido de las posiciones del Buffer (F + 1 = F1).

Por eso al final quiero imprimir la variable DatoRecibido con el %s, por que ahi deberia estar la concatenacion de las casillas del array.

No se si me estais entendiendo. :-(


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #9 en: 25 de Noviembre de 2010, 11:17:47 »
Una sola variable no puede contener "F1", porque es codificación ascii y necesitas de 2 Bytes para almacenar eso. O sea, en Data ya tienes lo que necesitas, y con atoi lo conviertes a un valor numérico.


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

Desconectado bmfranky

  • PIC16
  • ***
  • Mensajes: 165
    • La Tienda De Fran
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #10 en: 25 de Noviembre de 2010, 11:23:33 »
Me pisaste Suky, iba a responder algo parecido, de todas formas, Jummi, lo que tratas son caracteres, (abcd..ikl...z123...) o números Hexadecimales (123...9ab...f), si son números al pasarlos a hex los contienes en un Byte, si no ,explica mejor que quieres conseguir, pues si son dos letras juntas , puedes crear tu propio tipo de variable y probar;
Visiten La Tienda De Fran ;-) Aqui. y mi nueva Web Aqui.

Desconectado Jummi

  • PIC10
  • *
  • Mensajes: 21
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #11 en: 25 de Noviembre de 2010, 12:45:13 »
A ver, lo que quiero es que a traves del puerto serie me llegen unos datos, en concreto que pulsan por ejemplo la tecla F11. Mando por el rs232 una trama de 4 bytes con la F,1,1,\0. Lo que queria hacer es meter todas todos los caracteres en una sola variable para despues con un Switch decirle si es F1 ... haz esto, si es F2 haz lo otro, etc.


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #12 en: 25 de Noviembre de 2010, 12:49:45 »
No se puede... Lo que te conviene es codificar tu sistema, o sea, si se presiona F1 enviar 0x10, hasta F12 en donde se enviaría 0x1B. Por ejemplo, y ahi si puedes utilizar switch.


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

Desconectado Jummi

  • PIC10
  • *
  • Mensajes: 21
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #13 en: 25 de Noviembre de 2010, 13:05:55 »
Ah, entiendo. Intentare hacer lo que me dices.

Gracias.

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Pregunta de novato: "Pasar de un array a una variable"
« Respuesta #14 en: 07 de Septiembre de 2011, 19:04:27 »
Disculpen que traiga al "presente lo pasado" (el hilo es del año pasado) pero tengo el mismo problema, es decir, mi programa almacena en un array una cadena de caracteres proveniente del USB CDC en realidad espero recibir una trama con cabecera, Nbytes, data, checksum y tengo que seccionar toda la trama recibida en partes y luego comparar con otras cadenas fijas en mi programa.

Por ejemplo al inicio declaro:
unsigned char flag_compara;
char LeerBuffer[64];
char cadena_ok[7]="INICIO";

luego en el main lineas mas abajo hago esto:
flag_compara=memcmp(LeerBuffer,cadena_ok,6);//Comparo los primeros 6 bytes entre lo que ha llegado en "LeerBuffer" con la cadena "INICIO" pero al compilar me sale Warning [2054] suspicious pointer conversion

... que puede ser? quiero comparar parte de la cadena recibida en "LeerBuffer" con otra cadena fija "INICIO", quiero comparar los 6 primeros caracteres.