Я не знаю порядковый номер ваших данных. Решение @ Dogbane может работать. В противном случае вам нужно получить байты типа int в зависимости от порядка байтов, например ::1003
int asInt = (bytes[0] & 0xFF)
| ((bytes[1] & 0xFF) << 8)
| ((bytes[2] & 0xFF) << 16)
| ((bytes[3] & 0xFF) << 24);
Затем вы можете преобразовать в число с плавающей точкой, используя:
float asFloat = Float.intBitsToFloat(asInt);
Это в основном то, что DataInputStream
делает под прикрытием, но предполагает, что ваши байты в определенном порядке.
Редактировать - Вкл. Битовый ИЛИ
ОП попросил разъяснить, что делает побитовое ИЛИ в этом случае. Хотя это более обширная тема, которая может быть лучше изучена независимо, я дам краткое резюме. Или (|
) - побитовый оператор, результатом которого является набор битов путем индивидуального выбора каждого бита из двух операндов.
например. (в двоичном формате)
10100000
| 10001100
-----------
10101100
Когда я предлагаю использовать его выше, он включает смещение каждого байта в уникальную позицию в int. Итак, если у вас есть байты {0x01, 0x02, 0x03, 0x04}
, которые в двоичном виде {00000001, 00000010, 00000011, 00000100}
, у вас есть это:
0000 0001 (1)
0000 0010 (2 << 8)
0000 0011 (3 << 16)
| 0000 0100 (4 << 24)
--------------------------------------------------------
0000 0100 0000 0011 0000 0010 0000 0001 (67 305 985)
Когда вы ИЛИ два числа вместе, и вы знаете , что в обоих не заданы два соответствующих бита (как здесь), побитовое ИЛИ - это то же самое, что и сложение.
См. Также