1

I would like to convert an array of bytes, received from serial, to a float.

Let's consider this exemple. I'm sending 0.12 byte-wise from an Android application. The conversion from float to array of bytes in the Android side is handled by this function

public static byte [] float2Bytes(float value)
    {
        return ByteBuffer.allocate(4)./*order(ByteOrder.LITTLE_ENDIAN).*/putFloat(value).array();
    }

When bytes arrive, they are stored in an array and the assembled.

hiBytew1 = bufferBytes[9];
//Serial.println(hiBytew1);
loBytew1 = bufferBytes[10];
//Serial.println(loBytew1);
hiBytew2 = bufferBytes[11];
//Serial.println(hiBytew2);
loBytew2 = bufferBytes[12];
//Serial.println(loBytew2);
float conAck = assemble(hiBytew1, loBytew1, hiBytew2,loBytew2);

How can I achieve this kind of conversion assuming that bytes are received in the correct order?

3

Just cast the pointer.

float conAck = *((float*)(bufferBytes + 9));
| improve this answer | |
  • 1
    This needs parentheses around “bufferBytes + 9”. – Edgar Bonet Jun 19 '15 at 19:00
  • Right, otherwise it will advance sizeof(float) * 9 bytes instead. – Ignacio Vazquez-Abrams Jun 19 '15 at 19:01
  • Grazie Ignacio, so it will automatically assemble the sequence in a float variable? Nice – UserK Jun 19 '15 at 19:02
  • 2
    @UserK: It will tell the compiler that the bytes it will be looking at are a float. – Ignacio Vazquez-Abrams Jun 19 '15 at 19:02
  • @userk there is no assembly. Floats are already stored as bytes in memory. You are asking android to put the 4 most meaningful bytes in the buffer. Then you are trekking arduino to consider the bytes together as a float. If you are to store the same number in memory it week have the same representation. In a nutshell, this is an O(1) operation. – ps95 Jun 25 '15 at 14:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.