【问题标题】:How to convert DEC 64bit double precision floating point to IEEE-754 (DEC is not decimal)如何将 DEC 64 位双精度浮点数转换为 IEEE-754(DEC 不是十进制)
【发布时间】:2021-04-01 07:17:01
【问题描述】:

在这里澄清一下,在这种情况下,DEC 是 Digital Equipment Corporation,而不是十进制。我所拥有的是带有 seeeeeeefffff 的 DEC 的二进制表示......(总 f 为 54)s = 符号位,e = 指数,f = 分数,我需要将其转换为 IEEE-754 格式,最好具有相同的精度.放到上下文中,这表示 gps 的 utc 时间标签。我对术语越来越感到困惑,因为我发现了多个可能代表 DEC 而可能不代表的名称。例如 VAX-ll、DEC64、PDP-11,我都试过了,但都没有成功。

这里是原始数据(十六进制),代表 DEC dpfp 中的 UTC 时间标签,以供参考,以及它的大约值。应该是:(请记住,此数据是 LITTLE ENDIAN,而 IEEE-754 应该是大端)

0x99, 0x48, 0xD9, 0xE4, 0x12, 0xF3, 0xF9, 0xF0 = 1608587778

我认为PDP-11VAX 更有可能

【问题讨论】:

  • 请注意,VAX-11 has two different types 的 64 位浮点表示。
  • 字节顺序是一个单独的问题。不同的系统可能以不同的字节顺序存储 IEEE-754 double。重要的部分是将 DEC 双精度值读取为 64 位无符号值,然后使用它生成 IEEE-754 双精度值作为 64 位无符号值(如果实现使用 IEEE-,则直接作为 C double 754 本机)。
  • @IanAbbott 我不确定我是否理解你,你是说我不需要对转换为 IEEE-754 的位进行任何处理吗?为简单起见,让我们假设一切都是大端。 (我的代码本身确实支持 IEEE-754,仅供参考)
  • @robell 你确实需要处理这些问题。
  • @IanAbbott 好的,这就是我遇到问题的部分,您知道或有任何我可以参考的源材料吗?

标签: c floating-point binary


【解决方案1】:

您可能会发现包 libvaxdata 1 可以满足您的需求。我没有使用过它,但它声称提供了在 IEEE 和 VAX 浮点类型之间进行转换的例程。 (它也可以用于 PDP-11 数据)。有一个文档描述了这些例程。

【讨论】:

    猜你喜欢
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2011-01-25
    • 2013-10-04
    • 1970-01-01
    相关资源
    最近更新 更多