3

我有一个代表双精度的字节数组:

char number[8];

我需要将其转换为实际的双精度(也有 8 个字节)。根据建议,我尝试了这个,但失败了:

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

为什么它失败了,我该怎么办?当然,我可以使用一些<<魔法来提取数据,但我不想这样做——它会消耗内存并使代码过于健壮。

4

3 回答 3

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";

应该使用 C++ 强制转换而不是 C 强制转换,所以很清楚您在做什么。

std::cout<< *reinterpret_cast<double*>(number) <<" is my number.\n";
于 2013-03-17T18:24:15.593 回答
3

如果您使用 c++,则使用reinterpret_cast。如您所见,C++ 的表现力要强得多。

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

// c style
double value = (*((double*)number));
于 2013-03-17T18:22:15.113 回答
1
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 字节时,已经造成了损害。我不知道标准中关于双打的内容。

于 2013-03-17T18:24:53.830 回答