Как преобразовать массив байтов в double в C?
У меня есть массив байтов, содержащий 8 байтов, и я хотел бы преобразовать и использовать их как двоичное число с плавающей запятой двойной точности.
может кто-нибудь сказать мне, как его преобразовать?
3 ответов
попробуйте это:
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
вот одно решение, использующее 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 <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
на самом деле является массивом, а не просто указателем.