2010-08-10 112 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的格式 - 并使用它。