Java - 将十六进制转换为 IEEE-754 64 位浮点 - 双精度

发布于 2024-11-16 11:11:52 字数 366 浏览 2 评论 0原文

我正在尝试将以下十六进制字符串:“41630D54FFF68872”转换为 9988776.0 (float-64)。

对于单精度 float-32,我会这样做:

int intBits = Long.valueOf("hexFloat32", 16).intValue();
float floatValue = Float.intBitsToFloat(intBits);

但这会抛出: java.lang.NumberFormatException: Infinite 或 NaN 当使用上面的 64 位十六进制时。

如何将十六进制转换为使用 IEEE-754 64 位编码的双精度浮点数?

谢谢

I'm trying to convert the following hex string: "41630D54FFF68872" to 9988776.0 (float-64).

With a single precision float-32 I would do:

int intBits = Long.valueOf("hexFloat32", 16).intValue();
float floatValue = Float.intBitsToFloat(intBits);

but this throws a: java.lang.NumberFormatException: Infinite or NaN when using the 64-bits hex above.

How do I convert a hex to a double precision float encoded with IEEE-754 with 64 bits?

Thank you

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

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

发布评论

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

评论(2

瞎闹 2024-11-23 11:11:52

您想要双精度,因此 Float 不是正确的类 - 这是单精度的。

相反,您需要 Double 类,特别是 Double.longBitsToDouble

You want double-precision, so Float isn't the right class - that's for single precision.

Instead, you want the Double class, specifically Double.longBitsToDouble.

星軌x 2024-11-23 11:11:52

几乎是正确的。只需省略 valueOf 调用中的双引号即可:

String hexString = "41630D54FFF68872";
long longBits = Long.valueOf(hexString,16).longValue(); 
double doubleValue = Double.longBitsToDouble(longBits);
System.out.println( "double float hexString is = " + doubleValue );

Almost correct. Just omit the double quotes in the valueOf call:

String hexString = "41630D54FFF68872";
long longBits = Long.valueOf(hexString,16).longValue(); 
double doubleValue = Double.longBitsToDouble(longBits);
System.out.println( "double float hexString is = " + doubleValue );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文