У меня есть массив байтов, который представляет двойной:
char number[8];
Мне нужно привести это к фактическому double (который также имеет 8 байтов). Основываясь на совете, я попробовал это, но это не удалось:
std::cout<<(*((*double)number))<<" is my number.\n";
Почему это не удалось и что мне делать? Я могу, конечно, извлечь данные, используя некоторые <<
волшебство, но я не хочу этого делать — это потребляет память и делает код слишком надежным.
Почему это не удалось?
У вас есть опечатка здесь.
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";
Если вы используете c ++, то используйте reinterpret_cast. C ++, как видите, гораздо выразительнее.
// cool c++
double value = *reinterpret_cast<double*>(number);
// c style
double value = (*((double*)number));
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 байтам. Я не знаю, что в стандарте говорится о двойниках.