Ho un programma che richiede 4 byte e li converte in un float IEEE-754. I byte vengono trasferiti fuori ordine, ma posso rimetterli in ordine correttamente. Il mio problema è trasferirli su un float. Le parti rilevanti di codice:Cast byte array a float
//Union to store bytes and float on top of each other
typedef union {
unsigned char b[4];
float f;
} bfloat;
//Create instance of the union
bfloat Temperature;
//Add float data using transmitted bytes
MMI.Temperature.b[2] = 0xD1;//MMIResponseMsg[7];
MMI.Temperature.b[3] = 0xE1;//MMIResponseMsg[8];
MMI.Temperature.b[0] = 0x41;//MMIResponseMsg[9];
MMI.Temperature.b[1] = 0xD7;//MMIResponseMsg[10];
//Attempting to read the float value
lWhole=(long) ((float)MMI.Temperature.f);
//DEBUGGING
stevenFloat = (float)MMI.Temperature.f;
lWhole
è una lunga e stevenFloat
è un galleggiante. Durante il debug posso vedere che i valori che assegno all'array di byte vengono memorizzati correttamente, tuttavia i valori di stevenFloat
e lWhole
non sono corretti. Sembrano al passaggio del mouse vicino a 0, o vicino ai valori massimi del float/long. Un lungo e float sono entrambi a 32 bit con il mio compilatore.
Qualcuno sa perché questo non funziona? Mi è sembrato corretto quando ho ricevuto il codice su cui lavorare e sembra essere una soluzione comune online, sono solo perplesso.
Sei sicuro che stanno trasferiti fuori uso? Quando ho inserito '0x41d7d1e1' in un convertitore esadecimale, ho ottenuto ~ 27, che sembra un buon numero. –
Un problema di endianità? –
cosa ti aspetteresti di ottenere da '0xD1E141D7'? – triclosan