Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
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 😉
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
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 😉
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
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