Преобразование 8 байтов двоичного кода с прямым порядком байтов в число с плавающей запятой двойной точности

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

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

(Если быть точным, тип файла .LAS, но это не должно иметь значения).

Есть ли какие-нибудь хитрости с Java?

12 голосов | спросил RedLeader 24 J0000006Europe/Moscow 2011, 20:58:55

5 ответов


0

Можно использовать ByteBuffer

из byte[] bytes

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

из сокета

 ByteBuffer bb = ByteBuffer.allocate(64*1024).order(ByteOrder.LITTLE_ENDIAN );
 socket.read(bb);
 bb.flip();
 double d = bb.getDouble();
ответил Peter Lawrey 24 J0000006Europe/Moscow 2011, 21:03:44
0

Здесь описаны два разных подхода: http : //bytes.com/topic/java/answers/18253-big-endian-vs-little-endian-data . Оба будут работать.

ответил jtoberon 24 J0000006Europe/Moscow 2011, 21:02:22
0
  1. Преобразование из порядкового номера в обратный порядок.
  2. Оберните конвертированные байты в ByteBufferInputStream.
  3. Получите число с двойной точностью с помощью DataInputStream.readDouble(in).

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

ответил alphazero 24 J0000006Europe/Moscow 2011, 21:06:07
0

Если вам нужно прочитать и поменять местами порядок байтов, есть EndianUtils из Commons IO:

https : //commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/EndianUtils.html

ответил spieden 24 J0000006Europe/Moscow 2011, 21:05:43
0

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

ответил Eric 24 J0000006Europe/Moscow 2011, 21:03:31

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132