RandomAccessFile in = new RandomAccessFile("BOT.grd", "r");
in.seek(28);
double xll=in.readDouble();
上面是我用来读取 29 到 36 字节位置的 double 据的代码。当前的值是 500,但我得到的是 2.088E-317
最佳答案
这个文件似乎存储在不同的 Endianness 中比java使用的要好。在转换为 double 之前,字节可能需要反转,您可以尝试以下代码来读取值:
long l = in.readLong();
double d = Double.longBitsToDouble(Long.reverseBytes(l));
下面是一个说明问题的示例:
double d = 500.0;
long l1 = Double.doubleToLongBits(d);
long l2 = Long.reverseBytes(l1);
System.out.println(Double.longBitsToDouble(l1));
System.out.println(Double.longBitsToDouble(l2));
输出:
500.0
2.088356E-317
关于java - 从java中的二进制文件读取Double时得到错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8037822/