Autor Tema: Ayuda: Función con parámetros string  (Leído 2611 veces)

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

Desconectado Shadowman

  • PIC10
  • *
  • Mensajes: 7
Ayuda: Función con parámetros string
« 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

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Ayuda: Función con parámetros string
« Respuesta #1 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
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: Ayuda: Función con parámetros string
« Respuesta #2 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. }
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Shadowman

  • PIC10
  • *
  • Mensajes: 7
Re: Ayuda: Función con parámetros string
« Respuesta #3 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

Desconectado Shadowman

  • PIC10
  • *
  • Mensajes: 7
Re: Ayuda: Función con parámetros string
« Respuesta #4 en: 18 de Agosto de 2006, 17:24:46 »
RedPic:

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

Atte.
Fernando

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Ayuda: Función con parámetros string
« Respuesta #5 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
« Última modificación: 18 de Agosto de 2006, 22:41:29 por jfh900 »
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús


 

anything