TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Shadowman en 18 de Agosto de 2006, 16:14:35

Título: Ayuda: Función con parámetros string
Publicado por: Shadowman en 18 de Agosto de 2006, 16:14:35
Hola:

·Estoy un tanto complicado con el manejo de strings con el PIC-C. En principio, necesito implementar la siguiente función:
Tengo 2 strings de 16 bytes, lo que quiero es generar un tercer string, de 16 bytes, donde cada byte corresponde al XOR entre el byte respectivo de los argumentos. Algo así:

Código: CSS
  1. int i;
  2. char a[16],b[16],c[16];
  3. strcpy(a,"ABCDEFGHIJKLMNOP");
  4. strcpy(b,"abcdefghijklmnop");
  5.  
  6. for(i=0;i<=15;i++)
  7.  c[i] = a[i] ^ b[i];

·Así funciona sin problemas. Pero lo que quiero es realizar una función donde pueda ingresar los 2 bytes como parámetros. He tratado de implementar la función, sin éxito (no compila). El código que generé es el siguiente:

Código: CSS
  1. char XorBytes(char b1[16], char b2[16])
  2. {
  3. int aux,i;
  4. char temp[16];
  5.  
  6. for(i=0;i<=15;i++)
  7.  temp[i] = b1[i] ^ b2[i];
  8.  
  9. for(i=0;i<=15;i++)
  10.  aux = temp[i];
  11.  
  12. return temp;
  13. }
  14.  
  15. void main()            
  16. {                      
  17. int i,aux;
  18. char a[16],b[16],c;
  19. strcpy(a,"ABCDEFGHIJKLMNOP");
  20. strcpy(b,"abcdefghijklmnop");
  21.  
  22. c = XorBytes(a,b);
  23.  
  24. sleep();
  25. }

·Como ven no es muy funcional; la variable aux la uso para ver el valor de cada elemento del string mediante un breakpoint del MPLAB.

·Al parecer no estoy pasando bien los argumentos a la función, o algo así... Si me pueden ayudar, estaría muy agradecido.

atte.
Fernando
Título: Re: Ayuda: Función con parámetros string
Publicado por: jfh900 en 18 de Agosto de 2006, 16:19:26
Tienes que pasar los parámetros de cadena como punteros:

char * cCad1;
char * cCad2;
char * cCad3;

char * XorBytes(char * b1, char * b2, char * b3)

Un saludo
Título: Re: Ayuda: Función con parámetros string
Publicado por: RedPic en 18 de Agosto de 2006, 16:34:41
Prueba a pasarle a la funcion los punteros de las tres variables ...

Código: C
  1. char a[17]={"ABCDEFGHIJKLMNOP"};
  2. char b[17]={"abcdefghijklmnop"};
  3. char c[17];
  4.  
  5. void XorBytes(char* ptr1, char* ptr2, char* result){
  6.  
  7.    int i;
  8.  
  9.    for(i=0;i<=16;i++) result[i] = ptr1[i] ^ ptr2[i];
  10.  
  11. }
  12.  
  13. void main(){
  14.  
  15.    XorBytes(a,b,c);
  16.    printf("%s\r\n%s\r\n%s\r\n",a,b,c);
  17.  
  18. }
Título: Re: Ayuda: Función con parámetros string
Publicado por: Shadowman en 18 de Agosto de 2006, 16:58:45
Gracias por su respuesta, amigos. Voy a hacer la prueba para implementar la función y le cuento cómo me fue.

Atte.
Fernando
Título: Re: Ayuda: Función con parámetros string
Publicado por: Shadowman en 18 de Agosto de 2006, 17:24:46
RedPic:

·Usé el método que me indicaste y funcionó OK :-/ ¡Muy agradecido!

Atte.
Fernando
Título: Re: Ayuda: Función con parámetros string
Publicado por: jfh900 en 18 de Agosto de 2006, 22:39:18
Solo una pequeña aclaración a la explicación de RedPic. Normalmente cuando se pasa por referencia el resultado a devolver, se suele devolver tambien este valor para poder utilizar la función de forma anidada, con lo que la declaración de la función quedaría como:

Código: C
  1. char * XorBytes(char* ptr1, char* ptr2, char* result)
  2. {    int i;    
  3.      for(i=0;i<=16;i++) result[i] = ptr1[i] ^ ptr2[i];
  4.      XorBytes = result;
  5. }

Permite hacer esto:

Código: C
  1. printf("%p\n",XorBytes(a,b,c));


En definitiva podemos poner la función XorByte dentro de otra función.

Un saludo