fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Descomponer un doub...
 
Avisos
Vaciar todo

Descomponer un double en 4 bytes

9 Respuestas
5 Usuarios
0 Reactions
6,417 Visitas
choda
Respuestas: 7
Topic starter
(@choda)
Active Member
Registrado: hace 17 años

Hola a todos!!!

Bien, la cosa, a priori, es bien fácil. Todos sabemos que un "double" son 32 bits (4 bytes), y a mi me interesa para mi proyecto almacenar en 4 bytes (de tipo char) cada uno de los 4 bytes del double.

He probado con punteros, pero no hay manera de hacerlo funcionar... alguien podría echar una mano?

SALUDOS!!!!! y gracias 😉

Responder
8 respuestas
ranganok
Respuestas: 3875
(@ranganok)
Ardero
Registrado: hace 19 años

choda, ¿Qué tipo de micro y de compilador estás usando (lo digo porque varía con el micro y sobretodo con el compilador)? ¿Has probado directamente en ensamblador? ¿y con union?

typedef union
{
unsigned char a[4];
double b;
} double4;

Sobretodo mírate como almacena tu compilador los doubles (el número de bits y el orden).

S2

Ranganok Schahzaman

Responder
choda
Respuestas: 7
Topic starter
(@choda)
Active Member
Registrado: hace 17 años

Uso el 18f2331 en el MPLAB - C18.

He intentado usar ensamblador... pero también falla. Me miró el código un coleguita que controla bastante de esamblador y tampoco lo comprendia... ¿usar union? ¡no lo había pensado! 😳

Lo pruebo y os cuento 😉

Responder
cmelendo
Respuestas: 101
(@cmelendo)
Estimable Member
Registrado: hace 18 años

No se si te puede valer (tampoco lo he probado) el siguiente código:

struct _float
{
unsigned char0;
unsigned char1;
unsigned char2;
unsigned char3;
}

/* Creamos la variable float */

float variableFloat;

/* Descomponemos variableFloat en 4 unsigned char */

unsigned char variableChar0=((struct _float *)(&vaciableFloat))->char0;
unsigned char variableChar1=((struct _float *)(&vaciableFloat))->char1;
unsigned char variableChar2=((struct _float *)(&vaciableFloat))->cha2;
unsigned char variableChar3=((struct _float *)(&vaciableFloat))->char3;

Saludos. Carlos

Responder
eventronic
Respuestas: 47
(@eventronic)
Ardero
Registrado: hace 19 años

Hola

Otra forma de hacerlo:


unsigned char a, b, c , d;
double f;

a = (unsigned char) f; //toma el byte de menos peso
f = f >> 8; //corro 8 bits a la derecha, para coger el siguiente byte
b = (unsigned char) f; //toma el byte de menos peso
f = f >> 8; //corro 8 bits a la derecha
c = (unsigned char) f; //toma el byte de menos peso
f = f >> 8; //corro 8 bits a la derecha
d = (unsigned char) f; //toma el byte de menos peso

se puede simplificar más, pero así es más claro. No lo he probado tal cual, pero debería funcionar.
Salu2

Responder
Página 1 / 2
Compartir: