如何在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
实际上是一个数组,而不仅仅是一个指针。