如何在C中将字节数组转换为double?

我有一个包含8个字节的字节数组,并希望转换并将它们用作双精度二进制浮点数。

有人可以告诉我如何转换它?

试试这个:

double a; memcpy(&a, ptr, sizeof(double)); 

其中ptr是指向字节数组的指针。 如果你想避免复制使用联盟,例如

 union { double d; char bytes[sizeof(double)]; } u; // Store your data in u.bytes // Use floating point number from ud 

这是一个使用memcpy函数的解决方案:

 double d = 0; unsigned char buf[sizeof d] = {0}; memcpy(&d, buf, sizeof d); 

请注意,解决方案如:

 d = *((double *) buf); 

应该避免。 这是未定义的行为,因为它可能违反对齐和别名规则。

在C ++中:

 double x; char buf[sizeof(double)]; // your data #include  // ... std::copy(buf, buf + sizeof(double), reinterpret_cast(&x)); 

在C:

 #include  /* ... */ memcpy(&x, buf, sizeof(double)); 

在C ++ 11中,您还可以使用std::begin(buf)std::end(buf)作为边界(包括头文件 ),在两种语言中都可以使用sizeof(buf) / sizeof(buf[0]) (或简称sizeof(buf) )的大小,所有提供的buf实际上是一个数组,而不仅仅是一个指针。