C++ 将8字节转换为双倍值

C++ 将8字节转换为双倍值,c++,arrays,double,converter,C++,Arrays,Double,Converter,我从插座上读到一些十六进制数据。该协议的规范告诉我,以下8个字节代表一个双精度值 例如,我有8个字节,比如: 0x3F 0xD1 0x9B 0x94 0xC0 0x00 0x00 0x00 (此值保存在字符数组中,因此数组[0]=0x3F,`array[1]=0xD1è…) 表示的双精度值为:0.275120913982 如何将这8个字节转换为这个双精度值 我尝试了很多不同的方法,但都没有真正起作用。所以我不知道如何把它变成一个双倍 您可以使用union,这对我很有用: #include &l

我从插座上读到一些十六进制数据。该协议的规范告诉我,以下8个字节代表一个双精度值

例如,我有8个字节,比如:

0x3F 0xD1 0x9B 0x94 0xC0 0x00 0x00 0x00
(此值保存在字符数组中,因此
数组[0]=0x3F
,`array[1]=0xD1è…)

表示的双精度值为:0.275120913982

如何将这8个字节转换为这个双精度值


我尝试了很多不同的方法,但都没有真正起作用。所以我不知道如何把它变成一个双倍

您可以使用union,这对我很有用:

#include <iostream>
using namespace std;

int main() {
    union { char b[8]; double d; };
    b[7] = 0x3F;
    b[6] = 0xD1;
    b[5] = 0x9B;
    b[4] = 0x94;
    b[3] = 0xC0;
    b[2] = 0x00;
    b[1] = 0x00;
    b[0] = 0x00;

    cout << "Double: " << d << endl;

    return 0;
}

你有没有检查过你是否需要执行从大端到小端的转换?“我尝试了很多不同的方法,但都不管用。所以我不知道如何将其转换为双端。”-这是一种预期,因此你可以向我们展示你所尝试的,并解释发生了什么以及它是如何不起作用的,你不明白为什么。无论如何,这很简单:
double d;memcpy(&d,&a[0],sizeof d)通常是关于类型双关的限定符,因为他指定了C++标记。
Double: 0.275121