簡體   English   中英

將IEEE-754之前的C ++浮點數與C#相互轉換

[英]Convert pre-IEEE-754 C++ floating-point numbers to/from C#

在.Net之前,在數學協處理器之前,在IEEE-574之前,Microsoft為浮點數定義了一種位模式。 C ++編譯器的舊版本愉快地使用了該定義。

我正在編寫一個C#應用程序,該應用程序需要在文件中讀取/寫入此類浮點數。 如何在2位格式之間進行轉換? 我需要雙向轉換方法。

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

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

是否有C ++編譯器選項指示其使用舊的FP格式? 那將是理想的。 然后,我可以使用以Null結尾的文本字符串在C#代碼和C ++代碼之間交換數據,並且C ++方法將是sprintf和atof函數的簡單包裝。

至少,我希望有人可以使用舊的FP格式的位定義進行回復,因此,如有必要,我可以組合一個低級位操作算法。

謝謝。

我遵循了JohannesRö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位指數(在我們一直在使用的little-endian視圖中為最后一位)它說偏差是短數字為0x81,長數字為0x401,但是我不確定該在哪里排列。 我只是通過實驗到達那里。

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

  3. 除了第二個最高字節的其余7位中的尾數的第一個置位位外,其余所有字節均不包括。 而且由於非零數字的最高有效位是1,因此未表示。 但是,如果有的話,它將在符號所在的位置共享相同的位(這就是為什么我在其中進行“ ed”運算以完成實際的尾數)。

MASM還支持類似於IEEE的10字節格式。 在那部分關於NaN和INF的內容中,我沒有看到任何內容。

根據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|                             |
  -------------------------------------------------

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM