我想将一些十六进制数据(8个字节)转换为双精度数。
使用C ++和代码
#include <iostream>
using namespace std;
int main()
{
union { char b[8]; double d; };
b[7] = 0x3F;
b[6] = 0xC9;
b[5] = 0xB3;
b[4] = 0xD5;
b[3] = 0x09;
b[2] = 0xFB;
b[1] = 0x93;
b[0] = 0x89;
cout<<d;
return 0;
}
我收到预期值d = 0.200801。
使用略微修改的代码复制我的Arduino Mega(仅用于输出)
void setup() {
Serial.begin(9600);
union { char b[8]; double d; };
b[7] = 0x3F;
b[6] = 0xC9;
b[5] = 0xB3;
b[4] = 0xD5;
b[3] = 0x09;
b[2] = 0xFB;
b[1] = 0x93;
b[0] = 0x89;
Serial.println(d, 9);
}
void loop() {
}
它不会返回预期值,但是:d = 0.000000000。
如何让我的Arduino像C ++编译器一样正确计算?