elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Conversión tipos float a U_int8
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Conversión tipos float a U_int8  (Leído 1,919 veces)
kondrag_X1

Desconectado Desconectado

Mensajes: 157


Ver Perfil
Conversión tipos float a U_int8
« en: 23 Agosto 2015, 22:57 pm »

Hola gente,

Estoy aquí porque ando un poco perdido con los tipos y los diferentes lenguajes, les comento.

tengo un numero en float(32 bits) y necesito pasarlo a u_int8. Mi idea, y creo que no voy a perder representación es el numero tipo float multiplicarlo por 1000, es decir, 25.890 float seria 25890.0 hacerle un cast a entero.

y luego esto dividirlo en en 4 bytes que se enviaría y en java recoger los 4byte y montar el número entero.

Mi pregunta es ¿Perderé representación al multiplicar x1000?

¿Hay alguna otra manera? He visto que con memcpy pero después de probarlo no lo he conseguido.





En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Conversión tipos float a U_int8
« Respuesta #1 en: 23 Agosto 2015, 23:02 pm »

En cuanto multiplicas un float, puede perder precisión, o puede perder valores en caso de que se salga del máximo.

Pero, ¿para qué multiplicarlo?
¿Qué quieres hacer con ese float?
Si haces:
Código
  1. float fl = 4.56;
  2. char * floatBytes = &fl;

Tendrás en "floatBytes" un arreglo de 4 chars, que serán los valores del float en memoria. Luego ya si quieres, los copias o haces lo que quieras con ellos.

Pero... ¿Qué pretendes hacer?


En línea

kondrag_X1

Desconectado Desconectado

Mensajes: 157


Ver Perfil
Re: Conversión tipos float a U_int8
« Respuesta #2 en: 24 Agosto 2015, 00:01 am »

Hola y gracias por contestar,

mira estoy programando un microprocesador con bluetooth  y usando la librería de bluetooth ,que me permite enviar en el payload información, adjunto la info pero en tipo unsigned char *.

cosa que con tu código vendría al pelo. Gracias.

Pero cuando leo los datos con otro programa de java como los interpreto de ahí mi pregunta.

lo que había pensado era: multiplicarlo, hacerle un cast a int y enviar 4 bytes.
recojo la información en el java y formo un int con los 4 bytes divido por 1000 y tendría el valor leído.

 PD: dejo el codillo para la conversión

Código
  1. uint8_t * float2ArrayUint8(float value)
  2. {
  3.    uint8_t output[] = {0,0,0,0};
  4.    uint32_t dataValue = (uint32_t) value * 1000;
  5.  
  6.    output[0] = dataValue and 0x000F;
  7.    output[1] = dataValue and 0x00F0;
  8.    output[2] = dataValue and 0x0F00;
  9.    output[3] = dataValue and 0xF000;
  10.  
  11.    return &output;
  12. }
  13.  
« Última modificación: 24 Agosto 2015, 00:14 am por kondrag_X1 » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Conversión tipos float a U_int8
« Respuesta #3 en: 24 Agosto 2015, 00:15 am »

Lo ideal es que hagas eso para enviarlo, y luego, puedes utilizar Float.intBitsToFloat(int bits)

Esa función transforma un entero de 4 bytes (la cadena de bytes), a float.
Tendrías que transformar los 4 bytes que recibes en Java a un int.
Esto último lo puedes hacer rápido con ByteBuffer:
Código
  1. ByteBuffer bb = ByteBuffer.wrap(array); // array = 4 bytes float
  2. // bb.order(ByteOrder.LITTLE_ENDIAN);
  3. int n = bb.getInt();

"Little endian" y "big endian" son las formas de las que se guarda en memoria los datos, sin ir más lejos.

La linea comentada "order()", depende de si utilizas LITTLE_ENDIAN o BIG_ENDIAN. Por ejemplo, Windows utiliza little-endian. Bueno, solo puede ser LITTLE_ENDIAN y BIG_ENDIAN, en el peor de los casos, prueba y averigua cual es xD
En línea

kondrag_X1

Desconectado Desconectado

Mensajes: 157


Ver Perfil
Re: Conversión tipos float a U_int8
« Respuesta #4 en: 24 Agosto 2015, 00:17 am »

muchísimas gracias por contestarme la verdad no sabia si estaba haciendo una genialidad o un disparate.
 ::)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con undefined reference to `Shoot::Shoot(float,float)´
Programación General
nakas95 2 2,094 Último mensaje 20 Mayo 2014, 00:17 am
por nakas95
Tipos Valor y Tipos Referencia(Solucionado)
.NET (C#, VB.NET, ASP)
Senior++ 5 3,769 Último mensaje 4 Noviembre 2014, 01:38 am
por DarK_FirefoX
conversion de tipos.
Java
kondrag_X1 6 2,701 Último mensaje 7 Agosto 2015, 16:21 pm
por kondrag_X1
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines