在.Net之前,在数学协处理器之前,在IEEE-574之前,Microsoft为浮点数定义了一个位模式。旧版本的C ++编译器很乐意使用该定义。
我正在编写一个需要在文件中读/写这样的浮点数的C#应用程序。如何进行2位格式之间的转换?我需要双向转换方法。
此应用程序将在PocketPC / WinCE环境中运行。
更改文件结构超出了此项目的范围。
是否有C ++编译器选项指示它使用旧的FP格式?那将是理想的。然后,我可以使用以null结尾的文本字符串在C#代码和C ++代码之间交换数据,而C ++方法将是围绕sprintf和atof函数的简单包装。
至少,我希望有人可以使用旧FP格式的位定义进行回复,因此如果需要,我可以组合一个低级别的位操作算法。
感谢。
答案 0 :(得分:3)
我跟随JohannesRössel的Wikipedia link面包屑,找到了一个不易翻译的Python实现:http://groups.google.com/group/comp.lang.python/browse_thread/thread/42150ccc20a1d8d5/4aadc71be8aeddbe
以下是Bengt Richter在该链接中的格式文档:
根据旧的MASM 5.0程序员指南,有一个Microsoft二进制格式 用于编码实数,包括短(32位)和长(64位)。
有3个部分:
最高字节中的偏向8位指数(我们一直使用的小端视图中的最后一个) 它表示短数字的偏差为0x81,长数字的偏差为0x401,但我不确定它在哪里排列。 我刚刚通过实验到达那里。
在第二高字节的高位中对位(0表示+,1表示 - )。
- 醇>
除了第二个最高字节的剩余7位中的尾数的第一个设置位之外的所有位, 和其余的字节。并且由于非零数字的最显着位是1,所以它 没有代表。但如果是的话,它将共享标志所在的相同位位置 (这就是我在那里完成实际尾数的原因)。
MASM还支持类似于IEEE的10字节格式。我在那部分没有看到任何内容 关于NaN和INF。
答案 1 :(得分:2)
根据Johannes的回答,您可以转到http://support.microsoft.com/kb/140520下载转换.dll的源代码,从mbf到IEEE。
编辑:实际上,这对你没有帮助。但实际的MBF格式记录在此处:http://support.microsoft.com/kb/35826: -------------------------------------------------
| | | |
|8 Bit Exponent|Sign| 55 Bit Mantissa |
| | Bit| |
-------------------------------------------------