2010-08-10 98 views
3

任何人都可以顯示如何正確地將二進制表示的數據轉換爲C中的雙精度值。例如,我有8個無符號字符值被轉換爲雙精度值(讓我們將其命名爲緩衝區)。所以緩衝區[0]的0位是LSB,緩衝區[7]的7位是MSB。非常感謝提前!從c中的二進制文件讀取雙精度值

回答

3

只投它,我覺得

char buf[8]; 
double x; 
... 
x = *((double*) buf); 
+1

這種技術假定架構,格式,字節順序,適當的對象大小都相同 - 如果數據來自同一臺機器,這些都可以。 – wallyk 2010-08-10 19:35:08

4

IF下面都是真:

  1. 你的機器是little-endian的。
  2. 在您的機器上,sizeof(double) == 8
  3. 您的機器的「字節」的想法與保存數據的機器(不是所有機器都使用八位字節/ 8位字節)的想法相同。
  4. 您的機器的浮點格式與生成/保存數據的機器的浮點格式相匹配。

你可以簡單地讀取8個字節到一個數組中,並做了鑄件(假設「FD」被打開的文件描述符):

char bytes[8]; 
fread(&bytes, 8, 1, fd); 
double d = *((double*)bytes); 

更普遍,但是,我建議不保存這樣的二進制數據。是的,它曾經是常見的,許多人仍然這樣做,但是對於現代硬件來說,這是非常不必要的,並且會導致這種情況,如果您的平臺與其寫入的平臺完全匹配,那麼只能輕鬆地對其進行反序列化到磁盤。選擇一種可移植的格式 - 如果可以的話,使用基於人類可讀的基於UTF-8的格式 - 並使用它。