![](/img/trans.png)
[英]How to Convert IEEE-754 Floating-Point Conversion From Decimal Floating-Point To 32-bit Hexadecimal 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個部分:
最高字節中有偏斜的8位指數(在我們一直在使用的little-endian視圖中為最后一位)它說偏差是短數字為0x81,長數字為0x401,但是我不確定該在哪里排列。 我只是通過實驗到達那里。
第二個高位字節的高位的符號位(+表示0,-表示1)。
除了第二個最高字節的其余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.