1

在 .Net 之前,在数学协处理器之前,在 IEEE-574 之前,微软为浮点数定义了一种位模式。旧版本的 C++ 编译器愉快地使用了这个定义。

我正在编写一个需要在文件中读取/写入此类浮点数的 C# 应用程序。如何进行 2 位格式之间的转换?我需要双向的转换方法。

此应用程序将在 PocketPC/WinCE 环境中运行。

更改文件的结构超出了此项目的范围。

是否有 C++ 编译器选项指示它使用旧的 FP 格式?那将是理想的。然后,我可以使用以 null 结尾的文本字符串在 C# 代码和 C++ 代码之间交换数据,并且 C++ 方法将是 sprintf 和 atof 函数的简单包装器。

至少,我希望有人可以回复旧 FP 格式的位定义,这样我就可以在必要时组合一个低级位操作算法。

谢谢。

4

2 回答 2

3

我从 Johannes Rössel 的Wikipedia 链接中找到了面包屑,发现了一个不难翻译的 Python 实现:http ://groups.google.com/group/comp.lang.python/browse_thread/thread/42150ccc20a1d8d5/4aadc71be8aeddbe

以下是 Bengt Richter 在该链接中的格式文档:

根据旧的 MASM 5.0 程序员指南,有一种用于编码实数的 Microsoft 二进制格式,包括短(32 位)和长(64 位)。

有3个部分:

  1. 最高字节中的偏置 8 位指数(在我们一直使用的小端视图中的最后一个)它表示短数字的偏差为 0x81,长字节的偏差为 0x401,但我不确定它在哪里排列。我只是通过实验到达那里的。

  2. 第二高字节的高位符号位(0 表示 +,1 表示 -)。

  3. 第二高字节的其余 7 位中除尾数的第一个设置位之外的所有字节,以及其余字节。并且由于非零数的最重要位是 1,所以它没有被表示出来。但如果是的话,它会在符号所在的位置共享相同的位(这就是为什么我在其中对它进行 or-ed 以完成实际的尾数)。

MASM 还支持类似于 IEEE 的 10 字节格式。我没有在 NaN 和 INF 的那部分看到任何内容。

于 2010-04-21T21:28:05.550 回答
2

根据 Johannes 的回答,您可以访问http://support.microsoft.com/kb/140520下载从 mbf 到 IEEE 的转换 .dll 的源代码。

编辑:实际上,这对你没有帮助。但实际的 MBF 格式记录在这里: http: //support.microsoft.com/kb/35826

  -------------------------------------------------
 |              |    |                             |
 |8 Bit Exponent|Sign|   55 Bit Mantissa           |
 |              | Bit|                             |
  -------------------------------------------------
于 2010-04-21T20:31:16.273 回答