12

I have not been able to convert something like this:

byte[] b = new byte[] { 12, 24, 19, 17};

into something like this:

float myfloatvalue = ?;

Could someone please give me an example?

Also how to turn that float back to bytes?

user1395152
  • 355
  • 2
  • 4
  • 13

3 Answers3

38

byte[] -> float

With ByteBuffer:

byte[] b = new byte[]{12, 24, 19, 17};
float f =  ByteBuffer.wrap(b).getFloat();

float -> byte[]

Reverse operation (knowing the result of above):

float f =  1.1715392E-31f;
byte[] b = ByteBuffer.allocate(4).putFloat(f).array();  //[12, 24, 19, 17]
Tomasz Nurkiewicz
  • 334,321
  • 69
  • 703
  • 674
18

From byte[] -> float, you could do:

byte[] b = new byte[] { 12, 24, 19, 17};
float myfloatvalue = ByteBuffer.wrap(b).getFloat();

Here is an alternative to using ByteBuffer.allocate for converting float -> byte[]:

int bits = Float.floatToIntBits(myFloat);
byte[] bytes = new byte[4];
bytes[0] = (byte)(bits & 0xff);
bytes[1] = (byte)((bits >> 8) & 0xff);
bytes[2] = (byte)((bits >> 16) & 0xff);
bytes[3] = (byte)((bits >> 24) & 0xff);
Reimeus
  • 158,255
  • 15
  • 216
  • 276
  • 3
    Minor point, ByeBuffer encodes in big endian and the current example is in little endian. Making them match would be great! Ty! – Sam Dec 16 '15 at 14:24
2

Convert the bytes to an int and use Float.intBitsToFloat()

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Float.html#intBitsToFloat(int)

Chris
  • 4,133
  • 30
  • 38