Probleme de conversion d'endian sur un float
surfeur29
Messages postés
76
Statut
Membre
-
loupius -
loupius -
Bonjour,
Dans le projet en cpp que je suis en train d'effectuer, il faut lire un fichier binaire mais je n'arrive pas à lire correctement les float à cause du problème de big/little endian. Malgré des tests de codes trouvés sur le net, cela ne fonctionne pas correctement..
voici le code qui me semblait le mieux...
float Parse::convert_long(float in, bool endian)
{
float out;
if(endian==true)
{
char *p_in = (char *) ∈
char *p_out = (char *) &out;
p_out[0] = p_in[3];
p_out[1] = p_in[2];
p_out[2] = p_in[1];
p_out[3] = p_in[0];
}
else if(endian==false)
{
out = in;
}
return out;
}
Le problème c'est que je récupère des nombres extravagants du genre -3.21567e-38 alors que je devrais obtenir des nombres du genre 38546.9954 ...
Merci de votre aide parce que je commence à devenir fou avec ce problème qui me bloque dans la suite de mon projet..
Dans le projet en cpp que je suis en train d'effectuer, il faut lire un fichier binaire mais je n'arrive pas à lire correctement les float à cause du problème de big/little endian. Malgré des tests de codes trouvés sur le net, cela ne fonctionne pas correctement..
voici le code qui me semblait le mieux...
float Parse::convert_long(float in, bool endian)
{
float out;
if(endian==true)
{
char *p_in = (char *) ∈
char *p_out = (char *) &out;
p_out[0] = p_in[3];
p_out[1] = p_in[2];
p_out[2] = p_in[1];
p_out[3] = p_in[0];
}
else if(endian==false)
{
out = in;
}
return out;
}
Le problème c'est que je récupère des nombres extravagants du genre -3.21567e-38 alors que je devrais obtenir des nombres du genre 38546.9954 ...
Merci de votre aide parce que je commence à devenir fou avec ce problème qui me bloque dans la suite de mon projet..
A voir également:
- Probleme de conversion d'endian sur un float
- Logiciel gratuit conversion calendrier républicain - Télécharger - Études & Formations
- Conversion mb mo ✓ - Forum Matériel & Système
- 2k€ conversion ✓ - Forum Bureautique
- Conversion bytes en mo ✓ - Forum Webmastering
- Endian vs pfsense - Forum Linux / Unix
1 réponse
A part le if(endian==false) qui est totalement inutile, le reste me parait correct.
Est-tu certain que sur ta machine, le float est bien un 32 bits ? Faire un 'print sizeof(float)'.
Tu peux utiliser des trucs du genre:
Est-tu certain que sur ta machine, le float est bien un 32 bits ? Faire un 'print sizeof(float)'.
Tu peux utiliser des trucs du genre:
for (int i=0; i< sizeof(float); i++)
printf ("%02X ", (unsigned char)((char*)&nombre)[i]); avant et après conversion pour suivre la valeur.
Je vais tester ton code et je te tiens au courant.
merci
Dans le code que j'ai donné, il ne faut pas écrire print sizeof(float), c'est un raccourci pour: printf ("taille du float: %d\n", sizeof(float));