Как создать float из четырех байтов?

303
20 мая 2017, 17:31

У меня есть обработчик, где поступают 4 байта и они превращаются в int, но эта схема не работает с float, потому что нет по битового сдвига. Помогите изменить код. Надо 4 байта превратить во float

int int32 = 0;
int[] bytes = new int[4];
for (int i = 0; i < bytes.length; i++)
     bytes[i] = stream.get();
for (int i = bytes.length - 1; i >= 0; i--)
     int32 = (int32 << 8) | bytes[i];
Answer 1

Превратить массив байтов во float можно с помощью ByteBuffer:

byte[] data = { 10, 10, 10, 10 };
float f = ByteBuffer.wrap(data).getFloat();

Если вместо big-endian порядка байтов нужен little-endian, то это нужно явно указать:

float f = ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN).getFloat();
Answer 2

Если требуется задать битовое представление для float, то это можно сделать на основе int с помощью Float.intBitsToFloat:

float value = Float.intBitsToFloat(int32);

Рекомендую предварительно уточнить, в каком порядке идут байты в исходном потоке.

Аналогичный вопрос на английском: How to convert 4 bytes array to float in java

READ ALSO
Android программно скрыть диалог при подключении usb устройства (как в ES Explorer)

Android программно скрыть диалог при подключении usb устройства (как в ES Explorer)

увидел такую возможность в es проводнике settings/display/usb plug-in message

220
Нежелательное поведение элементов RecyclerView

Нежелательное поведение элементов RecyclerView

Всем доброго времени суток! Имеется RecyclerView, элементы которого могут выходить за пределы экранаКаждый элемент представляет из себя View с корневым...

275
Парсер интернет магазина на Java

Парсер интернет магазина на Java

Получил тестовое задание написать парсер для интернет магазина, чтобы через поле поиска задать интересующий товар и на выходе получить xml файл...

430
Как одновременно получить данные от retrofit?

Как одновременно получить данные от retrofit?

Мне нужно одновременно получить данные еще и с

200