我想讀取存儲爲char數組中特定二進制格式的浮點數。的格式如下所示,其中每個字母表示一個二進制數字:閱讀在字符數組中以二進制格式存儲的double
SEEEEEEE MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM
格式在此website更清楚的解釋。基本上,指數是超過-64的符號,尾數被標準化爲值< 1和> 1/16。爲了得到數字的真實值,尾數與指數真值的冪相乘16倍。
基本上,我到目前爲止所做的是提取符號和指數值,但我無法提取尾數。我正在嘗試的實現非常蠻力,在代碼方面可能遠非理想,但在我看來,它是最簡單的。它basicly是:
unsigned long a = 0;
for(int i = 0; i < 7; i++)
a += static_cast<unsigned long>(m_bufRecord[index+1+i])<<((6-i)*8);
它採用存儲在所述字符陣列中的每個8位字節的大小和轉移它根據其在陣列中的索引左。因此,如果陣列我有如下:
{0x3f, 0x28, 0xf5, 0xc2, 0x8f, 0x5c, 0x28, 0xf6}
我期待a
值改爲:
0x28f5c28f5c28f6
然而,與上述實施a
取值:
0x27f4c18f5c27f6
後來,我使用以下代碼將長整數轉換爲浮點數:
double m = a;
m = m*(pow(16, e-14));
m = (s==1)?-m:m;
這裏怎麼回事?另外,我很想知道如何實現這樣的轉換最理想?
這就像過去兩天中關於完全相同的事情的第十個問題。這是否是某種家庭作業的最後期限?你的教授是否知道你正在就這個問題尋求答案? – 2013-02-10 15:22:47
不幸的是,我還沒有看到以前的問題,但我做過搜索,如果之前有任何類似的問題。如果你必須知道,這個上下文是關於讀取GDSII格式文件(主要存儲IC佈局的文件格式)。更多信息請參考:(http://boolean.klaasholwerda.nl/interface/bnf/gdsformat.html )另外,沒有任何教授參與其中。 – cgurleyuk 2013-02-10 15:25:03
不夠公平,並且對於暗示道歉。 – 2013-02-10 15:30:30