java - 从java中的二进制文件读取Double时得到错误的值

标签 java double binaryfiles

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/

相关文章:

java - jasper 报告了 poi jar 的替代品

java - Webflow 与 Angular 还是两者兼而有之?

java - 示例 : Sending sendgrid email programmatically with Volley

c++ - 如何在 C++ 中创建缓冲区以创建新文件

binary - 这是什么浮点格式?

powershell - 将.EXE编码/解码为Base64

java - 'gradle -q task' 实际上是做什么的?

c++ - dtoa vs sprintf vs Grisu3 算法

C++试图返回一个 double 组的字符串(有点)

c++ - 在 C++ 中读取具有混合值的行