从c中的二进制文件中读取双精度

sdf*_*dfg 4 c binary binaryfiles binary-data

任何人都可以展示如何在 C 中正确地将二进制表示的数据转换为双精度值。例如,我有 8 个无符号字符值要转换为双精度值(让我们将其命名为缓冲区)。所以buffer[0]的0位是LSB,buffer[7]的7位是MSB。预先非常感谢!

Nic*_*ght 5

如果以下条件全部成立:

  1. 你的机器是小端的。
  2. 在你的机器上,sizeof(double) == 8
  3. 您的机器对“字节”的概念与保存数据的机器的概念相同(并非所有机器都使用八位字节/8 位字节)。
  4. 您机器的浮点格式与生成/保存数据的机器的浮点格式相匹配。

您可以简单地将 8 个字节读入数组,然后进行强制转换(假设“fd”是打开的文件描述符):

char bytes[8];
fread(&bytes, 8, 1, fd);
double d = *((double*)bytes);
Run Code Online (Sandbox Code Playgroud)

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