我有一个代表双精度的字节数组:
char number[8];
我需要将其转换为实际的双精度(也有 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 字节时,已经造成了损害。我不知道标准中关于双打的内容。