J'ai ce bit de code qui produit de mauvais résultats.memcpy ne pas faire comme il est censé
#include <stdio.h>
#include <string.h>
int main()
{
unsigned char bytes[4];
float flt=0;
bytes[0]=0xde;
bytes[1]=0xad;
bytes[2]=0xbe;
bytes[3]=0xef;
memcpy(&flt, bytes, 4);
printf("bytes 0x%x float %e\n", flt, flt);
return 0;
}
la sortie que je reçois est
octets 0xc0000000 flottant -2.000001e + 00
Je comptais obtenir
octets 0xDEADBEEF flotter -6.2598534e +18
modifier # 1 comme l'a souligné le boutisme pourrait être différente qui entraînerait les
octets suivants 0xefbeadde flotteur -1.1802469e + 29
ce que je ne comprends pas la transtyper de float en entier non signé résultant en 0xc0000000 (le flottant dans la même instruction printf étant -2.0000 j'attribuerais à l'optimisation du compilateur)
cela fonctionnait auparavant sur un autre ordinateur. Cela pourrait être un changement d'architecture.
ne se rendent pas compte qu'il était un problème de printf pour la partie hexagonale. Je ne comprends pas comment le flotteur n'a pas été moulé correctement en double. – Tanj
Lancer le flotteur pour doubler fait plus que déplacer quatre octets vers la droite: la conversion fait en sorte que 3,14 po de flottement soit 3,14 po de double. Et après une promotion à double, printf() est passé quatre octets, où le% x lui dit d'attendre 2 octets. Donc tout après% x est hors base. – Andomar