Autor Tema: convertir un float en int8  (Leído 1864 veces)

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

Desconectado vinny

  • PIC10
  • *
  • Mensajes: 27
convertir un float en int8
« en: 21 de Enero de 2007, 15:08:59 »
Hola!
tengo un problemilla, necesito guarda un dato float en una eeprom externa mediante i2c, los datos normales que se envian a esta eeprom son int8, que es el tamaño de cada posicion d memoria.
Havia pensado en transformar el float en varios int8, haciendo mascaras y rotandolos bits interesantes hacia un lado y eliminar el resto, pero no me ha salido, el compilador no me deja. Mi idea habia sido la siguiente
                          float total=0,mitja=0,tensio,valors=0;
                          float Ften1, Ften2, Ften3, Ften4;
                          Ften1=tensio && 1111000000000000;//MSByte
                          Ften1>>24;//coloco els bits que ens donen informació a la dreta del tot
                          Ften2=tensio && 0000111100000000b;
                          Ften2>>16;
                          Ften3=tensio && 0000000011110000b;
                          Ften3>>8;
                          Ften4=tensio && 0000000000001111b;//LSByte
                          ten1=Ften1;

El compilador no deja rotar bits en un float, ni se como desacerme de los bits sobrantes , esperaba que se me ocurriera algo para eso pero me he bloqueado del todo.

Solo existen dos cosas infinitas, el universo y la estupidez humana, de lo primero no estoy seguro...

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: convertir un float en int8
« Respuesta #1 en: 21 de Enero de 2007, 15:30:32 »
vinny puedes hacer un puntero del tipo char y dirigirlo a la variable float.

ej.

Código: C
  1. char * ptr;
  2. char dato;
  3. float myvar;
  4.  
  5.  
  6. ptr = (char *)&myvar;
  7.  
  8. dato=*ptr;  // primer byte del dato float original
  9. // mandas a guardar en la eeprom o en el buffer (si es que mandas varios datos a la vez a la memoria i2c)
  10.  
  11. ptr++;      // se incrementa el puntero para ubicarse en el 2do byte de la variable float
  12. dato=*ptr; // segundo dato del dato float original
  13.  
  14. // y así sucesivamente

Si sabes algo de matemática de punteros podrás ver que puedes armarlo como te parezca.  En este caso, lo hice breve y simple y pudieras usar un bucle para guardar 4 datos por vez, o seguir haciendo solamente el incremento.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado vinny

  • PIC10
  • *
  • Mensajes: 27
Re: convertir un float en int8
« Respuesta #2 en: 22 de Enero de 2007, 16:13:55 »
gracias maunix, la verdad es q no habia pensado en la posibilidad de utilizar punteros para esto, pero creo q va a funcionar  :lol:
Solo existen dos cosas infinitas, el universo y la estupidez humana, de lo primero no estoy seguro...

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: convertir un float en int8
« Respuesta #3 en: 22 de Enero de 2007, 21:04:24 »
gracias maunix, la verdad es q no habia pensado en la posibilidad de utilizar punteros para esto, pero creo q va a funcionar  :lol:

Y bueno, son pequeños truquillos.  Ya verás como se te hacen comunes el uso de punteros para casi todo!.

Cuando quieras guardar una variable que es una estructura, también los necesitarás.

 8)
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything