【发布时间】:2016-06-10 17:09:17
【问题描述】:
我正在开发一个程序,它将真正旧的 Open Access 4 .df 文件转换为 其他格式并创建数据库脚本 - 我已经能够转换每个 除十进制类型外的可能类型。我发现字节顺序必须是 80 位扩展精度。我已经尝试自己进行转换,但我无法在 Java 中进行从 80 位扩展精度 (https://en.wikipedia.org/wiki/Extended_precision#x86_Extended_Precision_Format) 到 String 和 String 到 80 位扩展精度的转换。
- 示例:
价值:1,235
df 文件中的十六进制:40 00 9e 06 52 14 1e f0 db f6
- 示例:
价值:0,750
df 文件中的十六进制:3f ff c0 00 00 00 00 00 00 00
也许有人可以帮助转换?
最好的问候
@EJP 评论: 好的,我正在丢弃最后 16 位,所以我得到了 3f ff c0 00 00 00 00 00 关于 (Java - Convert hex to IEEE-754 64-bit float - double precision) 我尝试将其转换为
String hex = "3fffc00000000000";
long longBits = Long.valueOf(hex ,16).longValue();
double doubleValue = Double.longBitsToDouble(longBits);
但结果是 1,984375 而不是 0,750
【问题讨论】:
-
我不知道“二进制字符串”是什么意思,但你所要做的就是丢弃最后 16 位并将其余的转换为
double。不难,在 JDK API 中都可以实现。 -
@ Jean-François Savard - Long.valueOf(hex ,16) 将十六进制作为输入 ;) 所以 Long.valueOf(hex ,16) 和 Long#decode 的结果相同。
-
@EJP,你不能只扔掉最后 16 位,因为格式不同。指数是一个 15 位,另一个是 11 位。
-
只扔掉 16 位看起来不是个好主意 - 看看这个话题 stackoverflow.com/questions/2963055/… 还有更多工作要做
-
知道图书馆吗?这个问题变得离题了,我建议你edit 成形。如果您不知道怎么做,可以向回答者寻求帮助
标签: java type-conversion extended-precision