开发者

Converting 8 bytes of little-endian binary into a double precision float

开发者 https://www.devze.com 2023-03-15 11:05 出处:网络
I have a binary file that I read byte by byte. I come acros开发者_JAVA百科s a section that is 8 bytes long, holding a double precision float (little endian). I can\'t figure out how to read this in a

I have a binary file that I read byte by byte.

I come acros开发者_JAVA百科s a section that is 8 bytes long, holding a double precision float (little endian). I can't figure out how to read this in and calculate it properly with masking and/or casting.

(To be specific, the file type is .LAS, but that shouldn't matter).

Are there any Java tricks?


You can use ByteBuffer

from a byte[] bytes

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

from a Socket

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


Two different approaches are described here: http://bytes.com/topic/java/answers/18253-big-endian-vs-little-endian-data. Both would work.


  1. Convert from little endian to big endian.
  2. Wrap your converted bytes in ByteBufferInputStream use.
  3. Get your double precision number via DataInputStream.readDouble(in).

Alternatively, you can just take the body of the readDouble method from JDK source and skip step 2 and 3.


If you need to read and swap byte order, there is EndianUtils from Commons IO:

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


Just use a DataInputStream to read the file, and use the readDouble() method.

0

精彩评论

暂无评论...
验证码 换一张
取 消