Array of byte array for swimming

I have a program that should take 4 bytes and convert them to an IEEE-754 float. Bytes are transmitted out of order, but I can return them in order, just fine. My problem is to pull them into the float. Relevant parts of the code:

//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 is long, and stevenFloat is a float. When debugging, I see that the values ​​assigned to the byte array are stored correctly, however, the values ​​of stevenFloat and lWhole are incorrect. They seem to be approaching 0 or close to max float / long values. Long and float are both 32 bits with my compiler.

Does anyone know why this is not working? It looked right to me when I got the code to work, and it seems to be a common solution on the Internet, I'm just at a dead end.

+7
c ++ c casting
source share
1 answer

In fact, this is a content issue:

 #include <stdio.h> #include <stdint.h> int main() { union { uint8_t bytes[4]; float f; } fun1 = { .bytes = { 0x41, 0xd7, 0xd1, 0xe1} }, fun2 = { .bytes = { 0xe1, 0xd1, 0xd7, 0x41} }; printf("%f\n%f\n", fun1.f, fun2.f); return 0; } 

Fingerprints:

 -483860023749617123328.000000 26.977480 
+10
source share

All Articles