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

时间:2012-01-02 16:22:31

标签: c++ c arrays type-conversion

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

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

3 个答案:

答案 0 :(得分:17)

试试这个:

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 u.d

答案 1 :(得分:17)

以下是使用memcpy函数的一种解决方案:

double d = 0;
unsigned char buf[sizeof d] = {0};

memcpy(&d, buf, sizeof d);

请注意以下解决方案:

d = *((double *) buf);
应该避免。这是未定义的行为,因为它可能违反对齐和别名规则。

答案 2 :(得分:9)

在C ++中:

double x;
char buf[sizeof(double)]; // your data

#include <algorithm>

// ...
std::copy(buf, buf + sizeof(double), reinterpret_cast<char*>(&x));

在C:

#include <string.h>

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


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