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

发布于 2024-12-14 08:35:20 字数 190 浏览 2 评论 0原文

RandomAccessFile in = new RandomAccessFile("BOT.grd", "r");
in.seek(28);
double xll=in.readDouble();

上面是我用来读取 29 到 36 字节位置的双精度数据的代码。当前的值是 500,但我得到 2.088E-317

RandomAccessFile in = new RandomAccessFile("BOT.grd", "r");
in.seek(28);
double xll=in.readDouble();

The above is the code i am using to read double data which is present from 29 to 36 byte location.The value present is 500 but i am getting 2.088E-317

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

寂寞笑我太脆弱 2024-12-21 08:35:20

看起来这个文件存储在与 java 使用的不同的 Endianness 中。在转换为双精度之前,字节可能需要反转,您可以尝试以下代码来读取该值:

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

It seems this file is stored in a different Endianness than the one java uses. The bytes probably need to be reversed before converting to double, you could try the following code to read the value:

long   l = in.readLong();
double d = Double.longBitsToDouble(Long.reverseBytes(l));

Here is an example that illustrates the problem:

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));

Output:

500.0
2.088356E-317
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文