C++ 如何在C+;中将无符号字符缓冲区转换为双精度缓冲区+;?

C++ 如何在C+;中将无符号字符缓冲区转换为双精度缓冲区+;?,c++,type-conversion,double,unsigned-char,C++,Type Conversion,Double,Unsigned Char,我正在尝试将无符号字符缓冲区数组转换为双精度数组。 为什么不将数组中的字节复制到double中 #include <iostream> #include <string> int main() { unsigned char buffer[8] = {63, 240, 0, 0, 0, 0, 0, 0}; double x = *(double*)buffer; std::cout << x << std::endl;

我正在尝试将
无符号字符
缓冲区数组转换为双精度数组。 为什么不将数组中的字节复制到double中

#include <iostream>
#include <string>

int main() {

    unsigned char buffer[8] = {63, 240, 0, 0, 0, 0, 0, 0};
    double x = *(double*)buffer;
    std::cout << x << std::endl;
    return 0;
}
#包括
#包括
int main(){
无符号字符缓冲区[8]={63,240,0,0,0,0,0};
双x=*(双*)缓冲区;

std::cout您的缓冲区绕错了方向。它应该是:

{0, 0, 0, 0, 0, 0, 240, 63}
(在使用IEEE浮点的little endian机器上)


您忘记了endianness。您是如何得出这些值实际上是值1的结论的?您是否尝试在关闭优化的情况下编译
double d=1;
,并以十六进制转储此变量的内容?我使用了在线双二进制转换器。我也尝试了十六进制版本。这是否回答了您的问题?答案是肯定的因为我的数字是大端的,不是小端的。
{0, 0, 0, 0, 0, 0, 240, 63}