2013-01-13 13 views
11

I nie były w stanie przerobić coś takiego:Jak przekonwertować z float na 4 bajty w Javie?

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

na coś takiego:

float myfloatvalue = ?; 

mógłby ktoś podać mi przykład?

Również, jak zmienić tę zmienną z powrotem na bajty?

+0

Czy te bajty są bitów reprezentacji zmiennoprzecinkowej, czy też są to 4-bajtowe liczby całkowite? – Bohemian

+0

W jakiej kolejności? Czy 12 jest najbardziej znaczącym lub najmniej znaczącym 8 bitów? –

+0

Są to tylko losowe wartości bajtów, które wypisałem jako – user1395152

Odpowiedz

16

Od byte[] ->float, można zrobić:

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

Tutaj jest alternatywą do korzystania ByteBuffer.allocate do konwersji 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); 
+0

Drobny punkt, ByeBuffer koduje w big endian, a obecny przykład jest w małym endian. Dopasowanie ich byłoby świetne! Ty! – Sam

36

byte[] ->float

Z ByteBuffer:

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

float ->byte[]

operacji odwrotnej (znając wynik powyżej):

float f = 1.1715392E-31f; 
byte[] b = ByteBuffer.allocate(4).putFloat(f).array(); //[12, 24, 19, 17] 
+0

To pomaga, a jeśli chodzi o zamianę tego floata z powrotem na bajty – user1395152

+3

+1 szczerze, ByteBuffer jest nieużywaną i niedocenioną klasą. – Bohemian

+0

@ user1395152: przeczytaj dokumentację 'ByteBuffer'. I zobacz moją aktualizację. –

Powiązane problemy