I'm attempting to convert an array of 4 byte
values to a single float
value in Arduino.
I'm using a union
in order to store my values, and I'm able to convert a long
to a float
that way.
Here's the code:
union value {
float f;
unsigned long l;
byte b[4];
} value;
void setup()
{
Serial.begin(9600);
// Setting 105.00 to the value variable via modifying the field "l"
value.l = 0x42D20000;
Serial.println("\nFloat value: " + String(value.f));
Serial.print("Byte values: {");
for (int i = 0; i < 4; i++)
{
Serial.print(value.b[i], HEX);
Serial.print(", ");
}
Serial.println("}");
// Setting 4.55 to the value variable via modifying the field "b"
value.b[0] = 0X40;
value.b[1] = 0X91;
value.b[2] = 0X99;
value.b[3] = 0X9A;
Serial.println("Float value: " + String(value.f));
Serial.print("Byte values: {");
for (int i = 0; i < 4; i++)
{
Serial.print(value.b[i], HEX);
Serial.print(", ");
}
Serial.println("}");
}
void loop()
{
}
I first try to assing the value of 105 to the l
field, and then read the f
field. That appears to be successful, and I get the desired 105.00 in the f
field if I try to read from it.
However, I subsequently want to assign a value of 4.55 to my f
field by assigning each byte entry in the b
array field. That does not appear to work, and I am left with a value of -0.00 in the f
field if I try to read from it.
This is current output of the code shown above:
Float value: 105.00
Byte values: {0, 0, D2, 42, }
Float value: -0.00
Byte values: {40, 91, 99, 9A, }
While the individual bytes are saved successfully in the b
field, the f
field does not appear to update automatically.
Any ideas as to why I'm not able to get 4.55 as my f
field in the latter half of the code above?
Thanks for reading my post, any guidance is appreciated.
The CPU is probably little-endian, which means the least-significant byte is stored at the beginning.
Have you tried this:
value.b[3] = 0X40;
value.b[2] = 0X91;
value.b[1] = 0X99;
value.b[0] = 0X9A;