Foros del Web » Programación para mayores de 30 ;) » C/C++ »

convertir array de char a double

Estas en el tema de convertir array de char a double en el foro de C/C++ en Foros del Web. Tengo almacenado dentro de un unsigned char array de longitud 8 un double. Ejemplo: array[0] = 0x80; array[1] = 0; array[2] = 0; array[3] = ...
  #1 (permalink)  
Antiguo 05/08/2008, 09:00
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 5 meses
Puntos: 0
convertir array de char a double

Tengo almacenado dentro de un unsigned char array de longitud 8 un double.
Ejemplo:
array[0] = 0x80;
array[1] = 0;
array[2] = 0;
array[3] = 0;
array[4] = 0;
array[5] = 0;
array[6] = 0xC0;
array[7] = 0x50;

Estoy intentando extraer estos valores e insertarlos dentro de una variable de tipo double, pero de una u otra forma obtengo resultados incorrectos:

Primero probé esto (siendo data el unsigned char array del que hablo):
Código:
	double temp;

	temp = (*data)<<(8*7);
	temp+= (*(data+1))<<(8*6);
	temp+= (*(data+2))<<(8*5);
	temp+= (*(data+3))<<(8*4);
	temp+= (*(data+4))<<(8*3);
	temp+= (*(data+5))<<(8*2);
	temp+= (*(data+6))<<8;
	temp+= *(data+7);
Esto me lanza warnings advirtiendome que el desplazamiento de bits provoca un overflow sobre *data (cierto, pues se trata de un simple char:8 bits)
Además el valor es incorrecto.

Otra cosa que intento, pues he visto hacer en otro código que tengo a mano es lo siguiente:
Código:
double temp;
memcpy( &temp, data, 8 );
Pero esto no parece tener ningún efecto sobre temp, ya que se queda con un valor de 0.

Alguna idea?
Noten que no quiero pasar una representación textual del valor double a binario, sino juntar varios valores binarios y obtener el valor double correspondiente.
  #2 (permalink)  
Antiguo 05/08/2008, 18:40
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: convertir array de char a double

Espero que esto te sirva, debería asignar el valor 128,5 a la variable num:

Código:
unsigned char array[8];
array[0] = 0x00;
array[1] = 0x00;
array[2] = 0x00;
array[3] = 0x00;
array[4] = 0x00;
array[5] = 0x10;
array[6] = 0x60;
array[7] = 0x40;
double num;

num=*(double*)&array;
printf("%0.5f\n", num);
Y si quieres hacerlo al revés, double a char[8]:
Código:
memcpy(array, &num, sizeof(double));
for(int N=0; N<8; N++) printf("%X ", array[N]);
  #3 (permalink)  
Antiguo 06/08/2008, 02:30
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 5 meses
Puntos: 0
Respuesta: convertir array de char a double

Gracias, funciona!

Investigando por que fallaba mi código, he descubierto que un double no se almacena igual que un int por ejemplo.
Más info aquí:
http://en.wikipedia.org/wiki/Double_precision
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 04:50.