Sign up ×
Arduino Stack Exchange is a question and answer site for developers of open-source hardware and software that is compatible with Arduino. It's 100% free, no registration required.

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?

share|improve this question

1 Answer 1

Just cast the pointer.

float conAck = *((float*)(bufferBytes + 9));
share|improve this answer
1  
This needs parentheses around “bufferBytes + 9”. –  Edgar Bonet Jun 19 at 19:00
    
Right, otherwise it will advance sizeof(float) * 9 bytes instead. –  Ignacio Vazquez-Abrams Jun 19 at 19:01
    
Grazie Ignacio, so it will automatically assemble the sequence in a float variable? Nice –  UserK Jun 19 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 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. –  prakharsingh95 Jun 25 at 14:58

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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