2010-04-21 82 views
1

在.Net之前,在數學協處理器之前,IEEE-574之前,Microsoft爲浮點數定義了一個位模式。舊版本的C++編譯器很高興地使用了這個定義。將pre-IEEE-754 C++浮點數轉換爲C#中的

我在寫一個C#應用程序,需要在文件中讀取/寫入這樣的浮點數。我怎樣才能做2位格式之間的轉換?我需要在兩個方向上的轉換方法。

該應用程序將在PocketPC/WinCE環境中運行。

更改該文件的結構超出了該項目的範圍。

是否有一個C++編譯器選項,指示它使用舊的FP格式?這將是理想的。然後,我可以通過使用以空字符結尾的文本字符串在C#代碼和C++代碼之間交換數據,而C++方法將是圍繞sprintf和atof函數的簡單包裝。至少,我希望有人可以回答舊的FP格式的位定義,所以如果需要的話,我可以組合一個低級別的位操作算法。

謝謝。

+0

難道是這一個:http://en.wikipedia.org/wiki/Microsoft_Binary_Format? – Joey 2010-04-21 20:28:38

回答

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|        | 
    ------------------------------------------------- 
+0

該鏈接表示源代碼確實可用,但它需要舊版本的C++編譯器才能正確存儲FP變量。我不能使用DLL,原因很明顯:這應該在PocketPC/WinCE平臺上運行。 – ArJayKay 2010-04-21 20:44:12

+0

Microsoft鏈接漏掉了重要的細節,如指數的偏倚以及尾數頂部是否有隱含的「1」位。 – 2010-04-21 21:30:03

+0

@Mark,誰會關心這件事? :)是的,我upvoted你的帖子。 – MSN 2010-04-21 22:02:28

3

我跟着從約翰內斯羅塞爾的Wikipedia link麪包屑,發現一個Python實現,不應該太難翻譯:http://groups.google.com/group/comp.lang.python/browse_thread/thread/42150ccc20a1d8d5/4aadc71be8aeddbe

這裏的文檔從本特·裏希特該鏈接的格式:

根據古老的MASM 5.0程序員指南,有一個微軟二進制格式 編碼實數,都短(32位)和長(64位)。

有3個部分:

    最高字節(上次在我們一直在使用小端視圖)
  1. 偏置8位指數 報告說,偏見是0×81的短號碼和0x401很長,但我不確定排隊的位置。 我剛剛通過實驗到達那裏。

  2. 符號位(0表示+,1表示 - )位於第二個最高字節的高位。

  3. 除了第二個最高字節的剩餘7位中的尾數的第一個設置位, 和其餘字節。而且由於非零數字的最重要的位是1,所以它不被表示。但如果是,它將共享相同位的位置,其中的符號是 (這就是爲什麼我要在那裏完成實際尾數)。

MASM還支持類似於IEEE的10字節格式。我沒有看到NaNs和INFs中 的部分內容。

相關問題