将char*强制转换为双字节

Cast char* to double - as bytes

本文关键字:字节 转换 char      更新时间:2023-10-16

我有一个表示double:的字节数组

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;

不确定是否需要的大小。当假设一个双字节是8字节时,已经造成了损害。我不知道标准中对双打有什么规定。