Autor Tema: ¿Como concatenar array hexadecimal? si cuando contiene un 0x00 se ve basura  (Leído 6659 veces)

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

Desconectado Marito_26

  • PIC10
  • *
  • Mensajes: 37
   

             Buen dia a todos, he tenido un problema para concatenar tres array que contienen valores Hexadecimal,
y cuando uno de los array tiene un 0x00 (que seria el NULL) me concatena basura al momento en que lo despliego
en el LCD puedo saber que no es lo que requiero

Me pregunto que estara mal??????    :?

Código: C++
  1. char START[1]={0x7E};   // No le coloque al final '\0' porque no me funcionaba
  2. char LONGITUD[2]={0x00,0x10};
  3. char COMANDO[1]={0x17};
  4. void main(void)
  5. {
  6.  int8 i;
  7.  char str[4];
  8.  lcd_init();     //Inicializa el LCD
  9.  printf(lcd_putc,"\f");
  10.  while (TRUE)
  11. printf(lcd_putc,"\f");
  12.  
  13.  strcat(str,START);
  14.  strcat(str,LONGITUD);
  15.  strcat(str,COMANDO);
  16.  
  17.  
  18. for(i=0;i<sizeof(str);i++)     // Si manejo el sizeof del ptr1 solo cuenta 2 items
  19.  {
  20.   printf(lcd_putc,"%X",str[i]);   // No imprime lo que debe ser, y si altero el orden en que se concatena, por ejemplo, poner despues del START, COMANDO y luego LONGITUD, tampoco
  21. }

Saludos

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: ¿Como concatenar array hexadecimal? si cuando contiene un 0x00 se ve basura
« Respuesta #1 en: 07 de Marzo de 2011, 03:09:33 »
No puedes utilizar arrays hexadecimales como si fueran strings de texto.
Los strings tienen esa particularidad: finalizan cuando se encuentra un 0.
Si imprimes más allá de ese 0, encontrarás otras direcciones de memoria que no están controladas.

Para concatenar o imprimir arrays hexadecimales tendrás que hacerlo con un bucle, y no con strcat.

Desconectado Marito_26

  • PIC10
  • *
  • Mensajes: 37
Re: ¿Como concatenar array hexadecimal? si cuando contiene un 0x00 se ve basura
« Respuesta #2 en: 07 de Marzo de 2011, 03:41:46 »
No puedes utilizar arrays hexadecimales como si fueran strings de texto.
Los strings tienen esa particularidad: finalizan cuando se encuentra un 0.
Si imprimes más allá de ese 0, encontrarás otras direcciones de memoria que no están controladas.

Para concatenar o imprimir arrays hexadecimales tendrás que hacerlo con un bucle, y no con strcat.


Pero si los datos se envian serial, como seria posible en el caso de enviar un 0x00 que se requiere o caracteres que en verdad no son imprimibles, ya lei el foro de principiantes y no he encontrado algo similar o que alguien lo utilize, como declaro el vector que concatenare, como char o int8?

 Como lo concatenaria en mi ejemplo anterior si tengo otro array que no se de que tipo lo declaro para que luego lo envie por serial
Agradezco que me respondas Nocturno

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: ¿Como concatenar array hexadecimal? si cuando contiene un 0x00 se ve basura
« Respuesta #3 en: 07 de Marzo de 2011, 03:58:58 »
Que se envíen en serie, o que no puedan imprimirse, no significa que el valor 0x00 no sea un valor válido.
Sólo tendrás que recibirlo como siempre y almacenarlo en tu array, por ejemplo así:

array[++indice] = getc();

Si utilizas CCS, es indiferente que utilices char, byte o unsigned int8. Los datos se almacenarán de la misma manera.

Para concatenar dos arrays puedes usar un bucle, algo como esto:

Código: C
  1. char array1[long1];
  2. char array2[long2];
  3. char array3[long1+long2];
  4.  
  5. for (i=0;i<long1+long2;i++) {
  6.    if (i<long1)
  7.       array3[i]=array1[i];
  8.     else
  9.       array3[i]=array2[i-long1];
  10. }

Desconectado Marito_26

  • PIC10
  • *
  • Mensajes: 37
Re: ¿Como concatenar array hexadecimal? si cuando contiene un 0x00 se ve basura
« Respuesta #4 en: 08 de Marzo de 2011, 15:34:08 »
Que se envíen en serie, o que no puedan imprimirse, no significa que el valor 0x00 no sea un valor válido.
Sólo tendrás que recibirlo como siempre y almacenarlo en tu array, por ejemplo así:

array[++indice] = getc();

Si utilizas CCS, es indiferente que utilices char, byte o unsigned int8. Los datos se almacenarán de la misma manera.

Para concatenar dos arrays puedes usar un bucle, algo como esto:

Código: C
  1. char array1[long1];
  2. char array2[long2];
  3. char array3[long1+long2];
  4.  
  5. for (i=0;i<long1+long2;i++) {
  6.    if (i<long1)
  7.       array3[i]=array1[i];
  8.     else
  9.       array3[i]=array2[i-long1];
  10. }

De nuevo molestando para una ultima consulta, con respecto a la gran ayuda que me proporciono RedPIC
solo me falta saber como poder crear una funcion que acepte un parametro de una variable para poder
saber cual es su tamaño (sizeof) y visualizarlo en mi lcd, esto con el fin de poder saber que tamaño
tiene mi array, como seria posible?  Tengo algo que he intentado hacer pero no me da el tamaño de vector
que en este caso seria de 8

Código: C++
  1. char DIRECCCION[]={0x00,0x13,0xA2,0x00,0x40,0x60,0x6D,0x23};
  2.  
  3. void demo(char *ptr)
  4. {
  5.  int8 size=0;
  6.  size=sizeof(ptr);
  7.  printf(lcd_putc,"%u",size);
  8.  
  9. }
  10.  
  11. void main(void)
  12. {
  13.  lcd_init();
  14.  
  15.  while (TRUEn
  16. {
  17.  demo(DIRECCION);   // Es la funcion que necesito introducirle variables que contienen diferentes tamanos de array, pues la direccion puede variar de tamano
  18. }
  19.  
  20.  
  21. }

Saludos cordiales


Lo que intento hacer es una funcion que me concatene arrays con valores hexadecimales, declarando en la RAM sus direcciones y llamando las variables que necesite para concatenar en el orden que deseo y no escribir toda la cadena

Desconectado Marito_26

  • PIC10
  • *
  • Mensajes: 37
Re: ¿Como concatenar array hexadecimal? si cuando contiene un 0x00 se ve basura
« Respuesta #5 en: 09 de Marzo de 2011, 22:24:06 »
Alguien me podria ayudar en como se podria hacer la funcion que acepte un parametro de array de tipo char para adjuntar dos arrays?

 :?


SALUDOS


 

anything