将 8 个字节转换为双精度值
Convert 8 bytes to double value
我从套接字中读取了一些十六进制数据。该协议的规范告诉我以下 8 个字节表示一个双精度值。
所以我有例如 8 个字节:
0x3F 0xD1 0x9B 0x94 0xC0 0x00 0x00 0x00
(这个值保存在一个char数组中所以Array[0] = 0x3F
, `Array[1] = 0xD1è...)
表示的double值为: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: 0.275121
我从套接字中读取了一些十六进制数据。该协议的规范告诉我以下 8 个字节表示一个双精度值。
所以我有例如 8 个字节:
0x3F 0xD1 0x9B 0x94 0xC0 0x00 0x00 0x00
(这个值保存在一个char数组中所以Array[0] = 0x3F
, `Array[1] = 0xD1è...)
表示的double值为: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: 0.275121