Comment passer de quatre caracteres a 1 float ?

Comment passer de quatre caracteres a 1 float ? - C - Programmation

Marsh Posté le 23-11-2004 à 21:11:17    

Bonjour,
 
Je cherche avec mes 4 caracteres, a les "coller" pour en faire un float.
 
J'ai essayé de faire des shift bit a bit :
 

Code :
  1. floattant=(float)a<<24|(float)b<<16|(float)c<<8|(float)d;


 
bien entendu ca ne marche pas, mais ca ne marche pas non plus si je fait le meme chose en "castant" non pas en float mais en unsigned long int, puis en "castant" le resultat en float (il me convertit mon gros chiffre entier en ce meme chiffre mais flottant, alors que moi je veut faire une copie bit a bit)
 
Merci d'avance
 
Max

Reply

Marsh Posté le 23-11-2004 à 21:11:17   

Reply

Marsh Posté le 23-11-2004 à 21:22:06    

Rien compris... Tu as quoi dans des chars, et tu veux en faire quoi ?

Reply

Marsh Posté le 23-11-2004 à 21:23:35    

kineton>tu t'arranges pour que les 4 caracteres soient alignés (tableau, structure )
 
mais c'est pas portable ce genre de truc

Reply

Marsh Posté le 23-11-2004 à 21:35:26    

En fait je programme un MicroControlleur
 
Je veut sauvegarder dans une EEPROM des float, mais on ne peut lire/ecrire que des mots de 8bits.
 
Tu coup je me suis dit que j'allais traiter mes flottants en 4 elements de 8 bits (un peu lourd certes, mais c'est la seul solution que j'ai trouvé) pour les sauvegarder et les relire par la suite.
 
En fait j'ai juste besoin de savoir traiter mes flotants bit a bit et apres ca devrait aller!
 
En ce qui concerne la protabilité, ce n'est pas tres important vu que mon microcontrolleur sera toujours le meme.

Reply

Marsh Posté le 23-11-2004 à 21:38:52    

fais une union
 
typedef union
{
char char_elt[sizeof(float)];
float flt_value;
} packet;

Reply

Marsh Posté le 23-11-2004 à 21:41:41    

Yes!!
 
C'est exactement ce que je dont je vien de penser, merci cris56, je vais tester ca dessuite.

Reply

Marsh Posté le 24-11-2004 à 00:34:14    

non, c'est naz, à cause des histoires d'alignements et des optimisations du compilateur. si tu veux bourrer quelque chose dans un float, utilise memcpy

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed