Подтвердить что ты не робот

Преобразование 8 байтов двоичного кода little-endian в float с двойной точностью

У меня есть двоичный файл, который я читал byte by byte.

Я сталкиваюсь с разделом длиной 8 байт, с плавающей точкой с двойной точностью (малое число). Я не могу понять, как это прочитать и правильно рассчитать с помощью маскировки и/или кастинга.

(Чтобы быть конкретным, тип файла -.LAS, но это не имеет значения).

Есть ли какие-либо трюки Java?

4b9b3361

Ответ 1

Вы можете использовать ByteBuffer

из byte[] bytes

 double d = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN ).getDouble();

из Socket

 ByteBuffer bb = ByteBuffer.allocate(64*1024).order(ByteOrder.LITTLE_ENDIAN );
 socket.read(bb);
 bb.flip();
 double d = bb.getDouble();

Ответ 4

  • Преобразовать с маленького конца на большой endian.
  • Оберните преобразованные байты в ByteBufferInputStream.
  • Получите номер двойной точности с помощью DataInputStream.readDouble(in).

В качестве альтернативы вы можете просто взять тело метода readDouble из источника JDK и пропустить шаги 2 и 3.

Ответ 5

Просто используйте DataInputStream, чтобы прочитать файл, и используйте метод readDouble().