Приведите char * к двойному байту

У меня есть массив байтов, который представляет двойной:

char number[8];

Мне нужно привести это к фактическому double (который также имеет 8 байтов). Основываясь на совете, я попробовал это, но это не удалось:

std::cout<<(*((*double)number))<<" is my number.\n";

Почему это не удалось и что мне делать? Я могу, конечно, извлечь данные, используя некоторые << волшебство, но я не хочу этого делать — это потребляет память и делает код слишком надежным.

3

Решение

Почему это не удалось?

У вас есть опечатка здесь.

std::cout<<(*((*double)number))<<" is my number.\n";

Так должно быть:

std::cout<<(*((double*)number))<<" is my number.\n";

и что я должен делать?

Вы мог уменьшить количество используемых скобок.

std::cout<< *(double*)number <<" is my number.\n";

Вы должен используйте приведение C ++ вместо приведений C, чтобы было ясно, что вы делаете.

std::cout<< *reinterpret_cast<double*>(number) <<" is my number.\n";
8

Другие решения

Если вы используете c ++, то используйте reinterpret_cast. C ++, как видите, гораздо выразительнее.

// cool c++
double value = *reinterpret_cast<double*>(number);

// c style
double value = (*((double*)number));
3

char number[8];
double d;
// number is assumed to be filled with a buffer representing a double.
memcpy(&d, &number, sizeof(double));
std::cout << d;

Не уверен, нужен ли sizeof. Ущерб уже был нанесен, когда было сделано предположение, что дубль равен 8 байтам. Я не знаю, что в стандарте говорится о двойниках.

1