我有一个包含8个字节的字节数组,并希望转换并将它们用作双精度二进制浮点数。
有人可以告诉我如何转换它吗?
答案 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
实际上是一个数组而不仅仅是一个指针。