从c中的二进制文件读取两倍

时间:2010-08-10 18:47:47

标签: c binary binaryfiles binary-data

任何人都可以展示如何正确地将二进制表示的数据转换为C中的double值。例如,我有8个unsigned char值要转换为double值(让我们将它命名为buffer)。所以buffer [0]的0位是LSB,缓冲区[7]的7位是MSB。非常感谢!

2 个答案:

答案 0 :(得分:4)

IF 以下全部为真:

  1. 你的机器是小端的。
  2. 在您的计算机上sizeof(double) == 8
  3. 您的机器对“字节”的想法与保存数据的机器的想法相同(并非所有机器都使用八位字节/ 8位字节)。
  4. 您机器的浮点格式与生成/保存数据的机器的格式相匹配。
  5. 你可以简单地将8个字节读入数组,并进行强制转换(假设'fd'是打开的文件描述符):

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

    但更一般地说,我建议不要保存那样的二进制数据。是的,它曾经是常见的,而且很多人仍然这样做,但是使用现代硬件它实际上是不必要的并导致这样的情况,如果您的平台与其编写的平台完全匹配,您只能轻松地反序列化它到磁盘。选择一种便携式格式 - 基于人类可读的UTF-8,如果可以 - 并使用它。

答案 1 :(得分:3)

投下它,我想

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