0

我使用 Pro Mini 作为 I2C 从机,它计算双精度。这个 double 由 ESP8266 WiFi 模块请求,并通过 I2C 逐字节发送。

现在我试图在另一端重新组装双,但它不起作用。当前在 ESP8266 上运行的代码:

// ABOVE SETUP
union {
  byte bytes[4];
  double value;
} bytedouble;

// IN LOOP
while(Wire.available()){
  byte read = Wire.read();
  bytedouble.bytes[num] = read;
  num++;
}
Serial.println(bytedouble.value); // Returns ovf/overflow

我发现doubleArduino Pro Mini 上的 a 是 4 个字节,但 ESP8266 上是 8 个字节。我可以转换这个吗?

4

1 回答 1

0

ESP8266 是 32 位处理器,所以sizeof(int)是 4 和sizeof(double)8。在 ATmega328sizeof(int)上是 2 和sizeof(double)4。但是,在两个处理器上sizeof(float)都是 4,这就是为什么你可以使用你在评论中提到的解决方法。

由于您正在处理整数,因此最好只使用intuint32_t代替doubleESP8266 的代码,因此长度将与 Arduino 的double. 这样,您可以避免使用会生成相当多字节的不必要代码的浮点数。

于 2016-12-07T06:50:16.420 回答