Foros del Web » Programación para mayores de 30 ;) » Java »

de float a un array de bytes en 8 bytes.

Estas en el tema de de float a un array de bytes en 8 bytes. en el foro de Java en Foros del Web. Quiero saber como puedo pasar un float a un array de bytes. No importa si la representación de los bytes tiene que ser a través ...
  #1 (permalink)  
Antiguo 09/09/2009, 11:37
 
Fecha de Ingreso: febrero-2005
Mensajes: 34
Antigüedad: 19 años, 3 meses
Puntos: 1
de float a un array de bytes en 8 bytes.

Quiero saber como puedo pasar un float a un array de bytes. No importa si la representación de los bytes tiene que ser a través de un string.

Un ejemplo: para el número 6.061.970.311.763.627, pues quiero poder obtener 0x158954731256AB ó "158954731256AB".

Con los enteros es muy facil, pero con los float se ve que no lo han hecho.

También había pensado en poder dividir el float en dos int, para poder sacar algo del tipo 0x00158954 0x731256AB, pero no se como. Me imagino que con una división y algo más se debe de poder hacer.
  #2 (permalink)  
Antiguo 09/09/2009, 15:12
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: de float a un array de bytes en 8 bytes.

Hola,

Código java:
Ver original
  1. public static void main(String[] args) {
  2.         /* 6061970311763627 */
  3.         /* 158954731256AB   */
  4.         double d = 6061970311763627d;
  5.         BigInteger bd = new BigInteger(String.format("%16.0f", d));
  6.         char s[] = String.format("%16x", bd).toCharArray();
  7.         System.out.println(s);
  8.     }

El tipo de datos 'float' tiene una precisión de 6 digitos, por lo tanto se pierde parte del número desde el momento en que se almacena en un 'float'. El tipo de datos 'double' la precisión es de 15 digitos, cualquier número más grande pierde precisión (sino usa otro tipo de datos).

Al "convertir" de double a BigInteger se mantiene la precisión de los primeros 15 digitos.

Saludos,
  #3 (permalink)  
Antiguo 09/09/2009, 16:29
 
Fecha de Ingreso: febrero-2005
Mensajes: 34
Antigüedad: 19 años, 3 meses
Puntos: 1
Respuesta: de float a un array de bytes en 8 bytes.

Gracias. Al final he usado una variante.

bd = new BigInteger(String.format("%16.0f", d));
adaptador = String.format("%16x", bd).trim();
while(adaptador.length() < 16) adaptador = "0"+adaptador;

No lo he probado, pero debe ir bien. En mi caso, era necesario tener los 16 al completo, con el array de chars los ceros son espacios en blanco.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:35.